Отображение изображения, созданного с помощью imagecreatefromstring - PullRequest
9 голосов
/ 05 августа 2011

Допустим, у меня есть код, который выглядит примерно так:

<?PHP

//
//... stuff here
//

$im = imagecreatefromstring( $imageData );

echo "<img src=" . /* what goes here? */ . "alt=\"the image\" />";


//
// more stuff here
//
?>

Что мне заменить / * что здесь происходит?* / с, чтобы мои данные изображения отображались?

Спасибо.

Ответы [ 4 ]

12 голосов
/ 05 августа 2011

Что мне заменить / * что здесь происходит? * / с, так что мои данные изображения будут отображаться?

Местоположение, которое вы указали, является так называемым src атрибутом img HTML-тега Docs . Значение является так называемым URI Документы .

В вашем случае вы хотите, чтобы этот URI указывал на данные изображения, о которых идет речь. Вы не указали, какой тип изображения должен выводиться, поэтому я буду считать, что это PNG-изображение в следующем примере.

Теперь вам нужно преобразовать данные изображения в URI. Наиболее простой URI для создания из данных изображения - это так называемый data: URI Википедия :

<?PHP

//
//... stuff here
//

$im = imagecreatefromstring( $imageData );

ob_start();
imagepng($img);
$png = ob_get_clean();
$uri = "data:image/png;base64," . base64_encode($png);

echo "<img src=" . $uri /* URI goes here */ . " alt=\"the image\" />";

//
// more stuff here
//
?>

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

Вместо использования data: URI вы также можете поместить туда любой другой URI, например HTTP URI, который указывает на скрипт PHP на вашем сервере, который возвращает изображение. Такой скрипт может быть очень простым:

<?php
$img = imagecreatefromstring($string);
header('Content-type: image/png');
imagepng($img);

Это сравнимо с тем, что предложил Марк Б, см. Также его ответ .

2 голосов
/ 05 августа 2011
<?php

$img = imagecreatefromstring($string);

header('Content-type: image/jpeg');
imagejpeg($img);

должно быть все, что вам нужно.Делая это с тегом изображения таким, какой вы есть, вам нужно вывести изображение во временный файл и указать тег изображения на него (что вызывает второй HTTP-запрос) или использовать URL-адрес данных .

0 голосов
/ 05 августа 2011

Я думаю, вы можете сделать что-то вроде этого ...

$src = "data:image/gif;base64," . $imageData ;
echo "<img src=\"$src\" alt=\"the image\" />";
0 голосов
/ 05 августа 2011

Вы должны сначала сохранить ресурс в файл или вывести его, используя что-то вроде imagepng() в отдельном запросе.

См. imagecreatefromstring() документацию для получения дополнительной информации.

Если вы хотите использовать схему URI данных , вы можете попробовать это вместо этого:

<?php

// If your image is binary data. use `base64_encode($imageData)`.
$imageData = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
           . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
           . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
           . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';

echo '<img src="data:image/png;base64,'. $imageData .'" />';
...