从 php 页面内的字符串动态渲染 jpg/png
Posted
技术标签:
【中文标题】从 php 页面内的字符串动态渲染 jpg/png【英文标题】:Dynamically Render jpg/png from string inside php page 【发布时间】:2015-03-16 18:49:27 【问题描述】:在呈现页面时,我需要从字符串(用户的电话号码)呈现图像 (png)。可以在 php 页面中呈现图像吗?或者我必须专门创建一个页面来呈现图像并且我会包含它?
如果我在我的 php 页面中使用此代码,则无法正常工作
<?php
// Create a 100*30 image
$im = imagecreate(100, 30);
// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);
// Write the string at the top left
imagestring($im, 5, 0, 0, 'Hello world!', $textcolor);
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
http://php.net/manual/en/function.imagestring.php
我必须声明 "header('Content-type: image/png')" 还是有其他方法来渲染 png?因为如果我声明它,页面的其他部分就不会呈现。
我正在使用 Zend Framework 2
按照他的建议,我尝试使用 base64 方式并且工作正常
<?php
ob_start ();
$im = @imagecreate(110, 20)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
imagepng($im);
$image_data = ob_get_contents ();
ob_end_clean ();
$image_data_base64 = base64_encode ($image_data);
?>
<img src="data:image/png;base64,<?php echo $image_data_base64; ?>" / >
免责声明 这是一个测试,不要在您的网站中应对和使用此代码,这是不安全的。
【问题讨论】:
你查看了这个答案吗? ***.com/a/14811182/199593 【参考方案1】:与所有网页一样——图像不是 html 的一部分——它们是单独的文件。所以是的,您必须创建一个单独的文件并为您的图像设置适当的标题。然后只需在图像的源中包含文件的 url。
请记住,如果您的 url 类似于“file.php?number=123456”,那么机器人很容易知道电话号码,它只会破坏图像的目的(如果我假设目的正确)。
或者,您可以生成图像,将其转换为 base64 并将其作为 data-uri 嵌入到实际的 HTML 源中。我不建议这样做,但如果您有兴趣,只需 google “html data-uri” - 您会找到很多示例。
【讨论】:
为什么不推荐我base64方式? Base64 数据 uri 相对“新”,因此可能无法在您需要它们处理的所有浏览器上运行,而不是像这样使用了很长时间的外部文件。跨度> 【参考方案2】:我同意马吕斯的观点。最好调用另一个文件生成图片。
<img src="phoneimg.php?n=123-456-7890.png" />
// or base64_encode() the number
<img src="phoneimg.php?n=MTIzLTQ1Ni03ODkw.png" />
使用 url 查询字符串发送号码、扩展名、大小等。记得在继续之前过滤和清理传入的查询。
【讨论】:
以上是关于从 php 页面内的字符串动态渲染 jpg/png的主要内容,如果未能解决你的问题,请参考以下文章
liip_imagine 是不是将 jpeg/jpg/png 文件转换为 webp? - symfony php 7.4.9