【问题标题】:PHP : why does imagepng() function increase the size when saving the image?PHP:为什么 imagepng() 函数在保存图像时会增加大小?
【发布时间】:2021-01-21 03:21:51
【问题描述】:

我正在尝试通过从其他现有图像复制并使用 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 size png


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 但是我还是不知道为什么用我的方法得到这么大的尺寸。我已经尝试过使用其他 PNG 图像,但大小根本没有改变。特别是这张图片有问题。
  • 我必须有原始图像才能更多地说明它。你已经给出了代码,但是没有图像我不能说图像的哪个方面发生了变化。
  • 嗯,现在有一个链接到原始帖子中的图像。
  • 谢谢。是的,这是一个 8 位彩色图像,您可以使用代码将其转换为 24 位彩色图像。因此,请尝试使用imagetruecolortopalette() 或使用imagecreate() 而不是imagecreatetruecolor()。
  • 好的,我试过imagetruecolortopalette($imageDest, False, 255) 然后大小现在是 366,5 ko。我也试过imagecreate($destWidth, $destHeight),大小是403,7 ko。看来它解决了我的问题,谢谢。
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2020-01-25
  • 2015-07-17
  • 2019-07-02
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多