PHP GD生成的图像图像无法显示,因为它包含Firefox中的错误

PHP GD生成的图像图像无法显示,因为它包含Firefox中的错误 [简体中文]

当使用PHP生成图像时,例如使用下面的代码或使用JPEG而不是PNG添加水印到服务器存储的图片,图像可能根本不会生成,并且会引发错误,直接在Firefox上可见,但不会在Chrome上。

尽管在某些服务器上工作,但这种代码现在可能在另外一些服务器上工作,有时候出于难以理解的原因。在我的情况下,它在本地运行得非常好,但在互联网服务器上出现错误,图像无法显示,因为它包含错误。

这个问题可能有几个原因,其中一些是:

输出之前已经设置好了。

来自图像生成的真正错误。

使用错误的图像类型。

图像库未安装。

$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

输出之前已经设置好了

即使不是故意的,也可能是这样的情况,例如,其他先前的脚本最后包含空格 - 为了避免此错误,请确保按照PHP建议,不要使用PHP结束标记关闭脚本?>

然后,在使用头函数之前,请使用以下代码来确保先前设置的头文件被丢弃

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

还有这个功能可以确保在标题和图像之前没有输出

ob_end_clean();

这解决了我的问题,并且图像再次正确显示。

来自图像生成的真正错误

如果在图像生成过程中出现真正的错误,请确保PHP设置为显示所有可能的错误类型,并检查相应的日志,以便能够追踪并解决它。

以下代码将使PHP报告日志中的所有错误:

error_reporting(E_ALL);
ini_set('display_errors', '1');

由于服务器配置的原因,您可能会发现报告了一些错误,即使它们没有出现在输出html中。

使用错误的图像类型

确保您使用的图像类型是正确的,例如使用此代码来区分png和jpeg。

根据使用的图像生成功能,还要根据使用的输出确保标题是正确的

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

图像库未安装

确保图像库已安装。为此,运行函数phpinfo();在一个脚本中,并检查输出中与PHP GD相关的以下值,这是由imagepng()等函数使用的图形库;

在缺少软件包的情况下,解决这个问题的方式取决于您的本地配置,可以通过使用PEAR命令添加软件包,也可以使用内置的解决方案中的Web主机进行软件包安装。

当imagejpeg或imagepng不工作时该怎么办

在NotePad ++中,打开调用imagepng函数的PHP文件,并在转到菜单编码>转换为UTF-8而不使用BOM后保存。

在DreamWeaver中,转到页面属性>标题/编码>取消选中包括Unicode签名(BOM)。

当PHP imagejpeg或imagepng不起作用时,很可能是因为PHP文件已经使用BOM,物料清单编码,因此在图像数据之前与图像一起发送额外信息。

PHP imagejpeg和PHP imagepng函数用于直接在服务器响应中发送图片代码。

PHP - imagepng无法正常工作
PHP - imagepng函数
PHP - imagejpeg函数

类似的文章

评论 (6)

Irvin Vasquez, 2018-08-19
Simple, clear and well explained, many thanks
Joyce Lawrence, 2018-08-19
ありがとう、非常に有益な
Catherine Roberts, 2018-08-19
Dokładnie tego, czego szukałem, idealnie
Headlinext, 2018-08-19
जानकारी का महान टुकड़ा, साझा करने के लिए धन्यवाद
Marshel, 2018-08-19
विश्वास नहीं कर सकता कि मुझे अंत में समाधान मिला, यह लंबे समय तक एक दुःस्वप्न था, अब हल हो गया
porcateraC, 2018-08-19
بالضبط ما كنت أبحث عنه ، مثالي

发表评论

使用Ezoic,广告收入增加50-250%。 Google认证发布合作伙伴。
使用Ezoic,广告收入增加50-250%。 Google认证发布合作伙伴。
 
使用Ezoic,广告收入增加50-250%。 Google认证发布合作伙伴。
使用Ezoic,广告收入增加50-250%。 Google认证发布合作伙伴。