PHP создает изображение без объявления заголовка изображения для всей страницы - PullRequest
0 голосов
/ 06 января 2010

Я хочу создать несколько изображений с помощью PHP на моей веб-странице. Есть ли способ сделать это, не создавая каждое изображение в своем собственном файле PHP, а затем помещая URL-адреса этих файлов в теги img?

Ответы [ 4 ]

4 голосов
/ 06 января 2010

Я предлагаю вам взять изображение и кодировать его в BASE64 с помощью base64_encode (), чтобы вы могли вставить данные изображения непосредственно в разметку HTML (безопаснее, чем ввод двоичного кода).

Процесс описан на этом сайте . Но в двух словах просто есть тег, который выглядит следующим образом (все, что после «base64» - это закодированные данные):

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" 
width="16" height="14" alt="embedded folder icon">
2 голосов
/ 06 января 2010

Нет, другого пути нет, поскольку заголовок content-type занимает всю страницу; Вы не можете иметь разные типы контента для одной страницы. Но вам не нужно иметь один PHP-файл для каждого из ваших изображений, вы можете сделать это так:

<img src="image_generator.php" />

И в image_generator.php вы объявляете заголовок изображения и выводите изображение, и, возможно, генерируете его в соответствии со строкой запроса. Например, вы можете добавить идентификатор изображения к URL:

<img src="image_generator.php?id=100" />

Затем в image_generator.php просто выберите данные изображения в соответствии с $_GET['id'] и сгенерируйте их.

0 голосов
/ 06 января 2010

Возможное решение - не иметь несколько PHP-скриптов - было бы иметь только один, который мог бы генерировать другое изображение в зависимости от параметра.

Например, некоторый псевдокод, подобный этому, должен прояснить то, что я имею в виду:

$id_img = intval($_GET['id']);
switch ($id_img) {
    case '1':
        // generate image 1
        break;
    case '2':
        // generate image 2
        break;
    case '3':
        // generate image 3
        break;
    default:
        // send some kind of 404 error
}


И ваши <img> теги будут выглядеть примерно так:

<img src="http://yoursite.com/img-generator.php?id=1" alt="..." />
<img src="http://yoursite.com/img-generator.php?id=2" alt="..." />


Тем не менее, каждый раз, когда генерируется PHP-скрипт, он может возвращать заголовкам данные только для одного изображения - это означает, что его нужно вызывать несколько раз.

0 голосов
/ 06 января 2010

Вы либо используете заголовок и выводите непосредственно байты изображения, либо записываете их в файл и помещаете их в атрибут src, другого пути нет.

Аккуратный подход заключается в том, чтобы иметь определенный сценарий создания изображения, на который вы ссылаетесь в атрибуте src:

<img src="imagecreator.php?img=43" />

В этом скрипте вы, очевидно, должны использовать подход header () и выводить байты изображения.

<?php
$im = imagecreatefrompng($_GET['img'].".png"); //Silly example

header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...