显示使用imagecreatefromstring创建的图像

时间:2011-08-05 18:39:51

标签: php html image gd jpeg

假设我的代码类似于:

<?PHP

//
//... stuff here
//

$im = imagecreatefromstring( $imageData );

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


//
// more stuff here
//
?>

我该怎样替换/ *这里有什么? * /所以我的图像数据会显示?

谢谢。

4 个答案:

答案 0 :(得分:11)

  

我该怎样替换/ *这里有什么? * /所以我的图像数据会显示?

您突出显示的位置是img HTML-tagDocs的所谓src属性。该值是所谓的URIDocs

在您的情况下,您希望该URI指向相关图像数据。您没有指定图像应该输出的类型,因此我将假设它是以下示例中的PNG图像。

您现在需要将图像数据转换为URI。从图像数据创建的最直接的URI是所谓的data: URIWikipedia

<?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一起返回到浏览器。如果图像很大,通常认为这是开销。

您可以在其中放置任何其他URI,而不是使用data: URI,例如指向服务器上返回图像的PHP脚本的HTTP URI。这样的脚本可以非常简单:

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

这与Marc B suggested, see his answer as well相似。

答案 1 :(得分:2)

<?php

$img = imagecreatefromstring($string);

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

应该是您所需要的一切。按原样使用图像标记,您需要将图像输出到临时文件并将图像标记指向该标记(这会产生第二个HTTP请求),或使用data url

答案 2 :(得分:0)

您必须先将资源保存到文件中,或者在单独的请求中使用imagepng()之类的内容输出。

有关详细信息,请参阅imagecreatefromstring()文档。

如果您想使用Data URI scheme,可以尝试这样做:

<?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 .'" />';

答案 3 :(得分:0)

我认为你可以做这样的事情......

$src = "data:image/gif;base64," . $imageData ;
echo "<img src=\"$src\" alt=\"the image\" />";