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

uqxowvwt  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(716)

我在处理上传到我的网站的图像时看到过一些随机错误,其中某些. png文件会导致错误被回显到输出缓冲区,这将扰乱返回到服务器的响应。
错误为:
"使用png_read_image时应打开隔行扫描处理"
我在手动处理上传文件的某些情况下看到过这种情况,现在我刚开始在我的WordPress安装中看到这种情况。我没有将这个问题标记为WordPress,因为我怀疑它与WordPress有任何关系,而一定是PHP中的一些问题。
我最初是在PHP 5中看到这个问题的,但自从我升级到PHP 7后也看到了。我现在运行的是PHP 7. 1. 9。
谷歌到目前为止还没有返回任何有意义的结果,似乎没有任何特定于PHP的答案,大多数答案都说用户需要在上传前对源文件启用隔行扫描,这从Web服务器的Angular 来看是不可接受的,因为我无法控制用户上传什么。上传后图像似乎仍然工作正常,我只是需要一种方法来抑制这条消息,这样它就不会导致错误的错误显示给用户。
错误消息确实提到使用png_read_image(),但是我没有在任何地方直接调用这个函数。也许它在内部的某个地方调用它,但是这使得调试非常困难。我能想到的最好的情况是它与imagepng()imagecreatefrompng()有关。
现在我在前端处理这个问题,在解析响应之前剥离错误文本。
我很抱歉,如果这是一个有点缺乏细节,但我真的不知道还有什么提供现在。

b1zrtrql

b1zrtrql1#

我有这个消息(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()打开或关闭隔行扫描位。
为了澄清什么是交错:
图像接口()函数是PHP中的一个内置函数,用于启用或禁用图像中的隔行扫描。隔行扫描(也称为交错)是一种编码位图图像的方法,这样,部分接收到图像的人看到的是整个图像的降级副本。网站上交错图像和非交错图像的一个区别是前者以低-质量版本,然后它的质量随着网站的加载而不断提高,而非隔行图像在网站加载时从上到下以固定质量逐行加载。
Source

相关问题