PHP : 为什么imagepng()函数在保存图片的时候会变大?

PHP : why does imagepng() function increase the size when saving the image?

我试图通过从另一个现有图像复制并使用 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, 0, 0, 0, 0, $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()您可以尝试降低图像的颜色深度。这也可以使输出文件更小。

并非所有 PNG 文件格式支持的缩小图像的方法都受 PHP 支持。