PHP:为什么保存图像时imagepng函数会增加大小?

问题描述

我正在尝试通过从其他现有图像复制并使用 imagepng 功能来保存PNG图像,但是保存的文件的大小增加了。 Here is the initial image.

$destWidth = 1920;
$destHeight = 1080;

$srcWidth = 1920;
$srcHeight = 1080;

// im.png : 399,1 ko
// width : 1920
// heigth : 1080
$image = imagecreatefrompng('im.png');

$imageDest = imagecreatetruecolor($destWidth,$destHeight);

imagecopyresampled($imageDest,$image,$destWidth,$destHeight,$srcWidth,$srcHeight);

// imnew.png : 857,5 ko
imagepng($imageDest,'imnew.png');

初始图像为399,1 ko(1920x1080)。 但是结果图像为857,5 ko(仍为1920x1080)。 为什么呢还有什么不增加尺寸的解决方案吗?

解决方法

有很多方法可以将图像存储在PNG文件中。原始方法和PHP保存的图像之间使用的方法必须有所不同。参见:

https://www.w3.org/TR/2003/REC-PNG-20031110

如果您查看记录了imagepng()的手册,则可以看到PHP也有一些选项。例如$quality参数。这是缩小文件的一种方法。

使用imagetruecolortopalette(),您可以尝试减小图像的色彩深度。这也可以使输出文件更小。

PHP不支持PNG文件格式支持的所有缩小图像的方法。