PHP GD 方法 imagecopy 比原始图像更大的图像文件

Posted

技术标签:

【中文标题】PHP GD 方法 imagecopy 比原始图像更大的图像文件【英文标题】:PHP GD method imagecopy larger the image filesize than the origin image 【发布时间】:2016-11-20 07:56:29 【问题描述】:

在我的工作中,我使用 php GD lib 函数 imagecopy 给图像添加水印,但是发现生成的图像比原来的图像大,有没有办法优化文件大小,除了 jpegoptim 来修剪 exif 元数据。

github上的测试代码:https://github.com/zeanwork/Watermark,你可以用exmaple测试,to.jpg文件比from.jpg和watermark.png文件大太多了

文件媒体信息

但我不希望带水印的图像比原始文件大很多,在我的测试中,to.jpg 文件大小有时是原始图像的 4 倍

任何减少文件大小的最佳方法?

【问题讨论】:

inagejpeg 调用的质量是什么(第 3 个参数) 我添加了一张图片 mediainfo 【参考方案1】:

这是图像质量,但我认为不可能有相同的 JPEG 图像大小,即使您只是将一张 jpg 图像复制到另一张。 Watermark 确实以 100 质量保存图像,这是最大的。我猜你的原始图像没有那么大的质量,因此文件大小不同。

看看Watermark class的204行:

# Save image
$functionTarget($this->imgSource, $imgTarget, 100);

您必须对其进行硬编码才能更改质量。

【讨论】:

是的,谢谢,通过命令获取原图质量:identify -format '%Q'

以上是关于PHP GD 方法 imagecopy 比原始图像更大的图像文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD imagejpeg:输出文件大小比原始文件大

PHP GD 库中的图像透明度

在新的、更大的图像中居中图像资源 (PHP/imagecopy)

如何通过 Imagick 实现 imagecopy (GD) 功能?

PHP GD 库质量下降。其他想法?

PHP GD 图像水印质量