在PHP中压缩PNG文件

3
我正在使用PHP的cairo扩展生成PNG文件。图像包含背景和文本。现在我想在cairo生成图像后通过PHP压缩这些图像。是否有任何库可以做到这一点?
我找到了一个名为pngcrush的工具。但它是一个命令行工具。我不想调用system命令。如果没有PHP解决方案,那么C语言解决方案也可以。在这种情况下,我将制作一个PHP扩展。
我已经阅读了这个相关问题。但里面没有答案。
3个回答

3

You can use imagepng() ...

//If you don't already have a handle to the image and it's just on the file system...
$im = imagecreatefrompng("yourGenerateFile.png");
$quality = 5; //0 - 9 (0= no compression, 9 = high compression)
imagepng($im, 'file/to/save.png', $quality);  //leave out filename if you want it to output to the buffer
imagedestroy($im);

我已经有了一个cairo句柄,但没有gd句柄。我会尝试你的代码并告诉你结果。 - Shiplu Mokaddim
质量没有得到保留。透明度完全丢失了! - Shiplu Mokaddim
1
为了透明度,请使用以下代码:imageAlphaBlending($im, true); imageSaveAlpha($im, true);,如此处所述:http://php.net/manual/en/function.imagecreatefrompng.php#43024 - Nicolas Boisteault

1

我会看看PngOptimizer。你可以在页面底部获取它的源码,而且还有一个单独的命令行版本。

唯一的问题是源码是C++的,而不是ANSI C。我从未制作过PHP扩展,所以我不知道是否会有差别。


0

如果您需要 C 代码,请查看 ImageMagick。看起来还有一个 PHP 扩展。


阅读 https://dev59.com/aVvUa4cB1Zd3GeqPs2T8 ,它并不是那样工作的。 - Shiplu Mokaddim
啊哈!看起来这是一个PHP问题,而不是ImageMagick的问题。你可以在PHP-ImageMagick扩展中添加标志,或者自己创建一个扩展。MagickCore提供了一个示例(搜索“example”)来展示如何在代码中将gif转换为png。 - RunHolt
如果你看到相关的问题,那么 OP 尝试了 PHP,但我也在命令行中尝试过。在这两种情况下,我都没有达到超过 10% 的压缩率。 - Shiplu Mokaddim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接