php:从二进制数据中重新创建并显示图像

Cam*_*ata 32 php image binaryfiles

是否可以从二进制数据中重新创建图像(如果需要,可以处理它们)并在同一个脚本中显示它们?就像是

// get and display image 1:
$imagedata1 = file_get_contents('assets/test.png');
$imagedata1 = process_using_gd_or_something($imagedata1);

echo "<img src={$imagedata1} >"; // <-- IS THIS (OR EQUIVALENT) POSSIBLE?

// get and display image 2:
//etc...
Run Code Online (Sandbox Code Playgroud)

我希望避免在处理完成后将图像存储到磁盘,或者使用外部脚本...

Ben*_*mes 60

您可以使用image 属性中的数据URI来执行此操作src.

格式为: data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

此示例直接来自数据URIWikipedia页面:

<?php
function data_uri($file, $mime) 
{  
  $contents = file_get_contents($file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
?>

<img src="<?php echo data_uri('elephant.png','image/png'); ?>" alt="An elephant" />
Run Code Online (Sandbox Code Playgroud)


Pek*_*ica 22

这实际上可以使用内联图像(称为数据URI).

您的图片标记看起来像这样:

<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">
Run Code Online (Sandbox Code Playgroud)

为什么他们大多不是一个好主意:

  • 页面加载速度变慢,因为在加载完整的HTML结构并因此呈现之前需要获取图像.如果您在图像上执行其他操作,则更是如此.您的网站很可能比外部图像感觉慢得多.

  • 内联图像需要进行base64编码,其大小增加33%.

如果您正在谈论一个合理的高流量,公共网站,我建议您在外部存储您的图像,并缓存它们.如果它仅适用于小型项目,则内嵌图像可能适合您.


Kra*_*rab 6

您的另一种可能性是创建一个脚本,将图像数据生成到输出并将链接指向它。

图片.php

$imagedata1 = file_get_contents('assets/test.png');
$imagedata1 = process_using_gd_or_something($imagedata1);

header('Content-type: image/png');
echo $imagedata1;
Run Code Online (Sandbox Code Playgroud)

other_pages.php:

echo "<img src='image.php?some_params'>";
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,我错过了不需要外部脚本的通知,但此解决方案比将图像编码为 base64 更有效。


eil*_*diz 5

尝试这个...

$img=base64_encode($row['PICTURE']);

<img alt="105x105" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/>
Run Code Online (Sandbox Code Playgroud)