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 支持。
我试图通过从另一个现有图像复制并使用 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 支持。