上传某些 .png 文件时出现错误“使用 png_read_image 时应打开隔行处理”

问题描述 投票:0回答:1

在处理上传到我的网站的图像时,我看到了一些随机错误,其中某些 .png 文件会导致错误回显到输出缓冲区,这会搞乱返回服务器的响应。

错误是:

“使用 png_read_image 时应打开隔行处理”

我在某些情况下手动处理上传的文件时看到过这种情况,现在我也开始在我的 WordPress 安装上看到这种情况。我没有将这个问题标记为 WordPress,因为我怀疑它与 WordPress 有任何关系,而它一定是 PHP 中的某个问题。

我最初在 PHP 5 中看到了这个问题,但自从升级到 PHP 7 后我也看到了这个问题。我现在运行的是 PHP 7.1.9。

到目前为止,谷歌搜索还没有返回任何有意义的结果,似乎没有任何特定于 PHP 的答案,大多数答案都说用户需要在上传之前在源文件上启用隔行扫描,这对于网络服务器来说是不可接受的的立场,因为我无法控制用户上传的内容。上传后图像似乎仍然可以正常工作,我只需要一种方法来抑制此消息,这样就不会导致向用户显示错误。

错误消息确实提到使用

png_read_image()
,但是我没有在任何地方直接调用这个函数。也许它在内部某个地方调用它,但这使得调试非常困难。我能想到的最好的办法是它与
imagepng()
imagecreatefrompng()
有关。

现在我正在前端解决这个问题,在尝试解析响应之前我会删除错误文本。

如果这有点缺乏细节,我很抱歉,但我真的不知道现在还能提供什么。

php php-7.1
1个回答
0
投票

我有此消息(PHP 7.2.3 + GD):

libpng warning: Interlace handling should be turned on when using png_read_image

还有其他一些

libpng warning: tRNS: invalid with alpha channel

libpng warning: iCCP: known incorrect sRGB profile

我的代码将来自不同来源(然后是不同质量)的 png 图像合并到一张图像中,在使用 Photoshop 处理某些图片后,消息消失了,但似乎有一个解决方法,请参阅下面的说明:

<?php
// Create an image instance
$im = imagecreatefromgif('php.gif');

// Enable interlancing
imageinterlace($im, true);

// Save the interlaced image
imagegif($im, './php_interlaced.gif');
imagedestroy($im);
?>

https://www.php.net/manual/en/function.imageinterlace.php

imageinterlace() 打开或关闭隔行扫描位。

为了澄清什么是交错:

imageinterlace() 函数是 PHP 中的内置函数,用于启用或禁用图像中的隔行扫描。隔行扫描(也称为交错)是一种对位图图像进行编码的方法,以便部分接收该图像的人看到整个图像的降级副本。网站上隔行图像和非隔行图像之间的一个区别是,前者首先以低质量版本加载,然后随着网站加载,其质量不断提高,而非隔行图像则以固定质量线加载网站加载时从上到下排列。

来源

© www.soinside.com 2019 - 2024. All rights reserved.