【问题标题】:How to Wrap PHP Drawn Image into a HTM img Tag如何将 PHP 绘制的图像包装到 HTML img 标签中
【发布时间】:2015-10-05 19:02:35
【问题描述】:

是否可以在 HTML 标记中扭曲 PHP 图像并将其发送到客户端

<?php
 $a = "A";
 $ima = imagecreate(100, 30);
 $bg = imagecolorallocate($ima, 255, 255, 255);
 $textcolor = imagecolorallocate($ima, 0, 0, 255);
 imagestring($ima, 5, 0, 0, '$a, $textcolor);
 imagepng($ima);
 imagedestroy($ima);

类似

echo '<img src='+ $ima+' alt=' ' />';

更新

<?php
$a = "A";
$b = "B";
$c = "C";
$n = "8";

$ima = imagecreate(100, 30);
$bg = imagecolorallocate($ima, 255, 255, 255);
$textcolor = imagecolorallocate($ima, 0, 0, 255);
imagestring($ima, 5, 0, 0, '$a, $textcolor);
header('Content-type: image/png');
imagepng($ima);
imagedestroy($ima);

$imb = imagecreate(100, 30);
$bg = imagecolorallocate($imb, 255, 255, 255);
$textcolor = imagecolorallocate($imb, 0, 0, 255);
imagestring($imb, 5, 0, 0, '$a, $textcolor);
header('Content-type: image/png');
imagepng($imb);
imagedestroy($imb);

$imc = imagecreate(100, 30);
$bg = imagecolorallocate($imc, 255, 255, 255);
$textcolor = imagecolorallocate($ima, 0, 0, 255);
imagestring($imc, 5, 0, 0, '$a, $textcolor);
header('Content-type: image/png');
imagepng($imc);
imagedestroy($imc);

$imn = imagecreate(100, 30);
$bg = imagecolorallocate($imn, 255, 255, 255);
$textcolor = imagecolorallocate($ima, 0, 0, 255);
imagestring($imn, 5, 0, 0, '$a, $textcolor);
header('Content-type: image/png');
imagepng($imn);
imagedestroy($imn);

echo '<img src="script.php?id=1" />';
echo '<img src="script.php?id=2" />';
echo '<img src="script.php?id=3" />';
echo '<img src="script.php?id=4" />';
?>

【问题讨论】:

    标签: php php-5.6


    【解决方案1】:

    是的。您需要做的是在图像标签中引用您的 PHP 脚本。

    <img src="yourPhpScript.php" />
    

    确保在您的 PHP 脚本中输出正确的 Content-Type 标头。

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

    您也可以base64-encode the image data,但不建议这样做,因为它会导致下载大小增加 33%。

    另外,倒数第三行有一个杂散引号'

    【讨论】:

    • @Behseini 回显四个图像标签。 &lt;img src="script.php?id=1" /&gt; &lt;img src="script?php?id=2" /&gt; etc.
    • 代替 echo,我相信你可以让脚本随着输出而死,有点像函数之外的返回
    • @Behseini 您的更新仍然没有阻止您拥有四个图像标签。
    • @Behseini 你想要一个页面上有四个图像,对吧?创建四个图像标签。每个图像大头钉都将引用一个单独的 PHP 脚本来输出图像。该图像出现,就像任何其他图像一样。如果这没有意义,请详细说明您的问题是什么。
    • 再次感谢,但你能看看更新的结尾吗? echo '&lt;img src="script.php?id=1" /&gt;';echo '&lt;img src="script.php?id=2" /&gt;';echo '&lt;img src="script.php?id=3" /&gt;';echo '&lt;img src="script.php?id=4" /&gt;'; 但这只是导出第一张图片!
    【解决方案2】:

    您可以使用输出缓冲区捕获。

    喜欢

     $a = "A";
     $ima = imagecreate(100, 30);
     $bg = imagecolorallocate($ima, 255, 255, 255);
     $textcolor = imagecolorallocate($ima, 0, 0, 255);
     imagestring($ima, 5, 0, 0, $a, $textcolor);
     ob_start();
     imagepng($ima);
     $obContents = ob_get_contents();
     ob_end_clean();
     imagedestroy($ima);
     echo('<img src="data:image/png;base64,' . base64_encode($obContents) . '" />');
    

    【讨论】:

    • 此方法并不理想,因为它会强制您刷新任何其他输出缓冲,并且 base64 编码有大约 33% 的开销。
    • 当然,但这是从同一个 PHP 文件生成图像和 HTML 代码而不写入磁盘的首选方法。您还可以使用 gzip 压缩。另一种方法是在同一个文件中包含 switch 语句和两种不同的内容类型,但在需要顺序图像渲染的情况下,这可能不是可取的。
    • 或者...共享内存、Redis 等。这里最好的选择是传入一个参数来说明该文本应该说什么,因为这是唯一改变的东西。我只指出这种方法并不理想,因此人们不会认为这是唯一的方法。每次我向人们解释如何做到这一点时,他们都会立即意识到 base64 编码是可行的方法,因为他们习惯于在单个脚本中处理所有数据,并且难以进行更广泛的思考。他们需要了解这种方法需要权衡取舍。
    • 没错,我确实增加了我的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-12-17
    • 1970-01-01
    • 2014-09-29
    • 2010-12-31
    相关资源
    最近更新 更多