1
yyfearth 2015-01-16 16:03:17 +08:00
可以读取jpg文件的质量设置 然后根据每张图片自己的质量设置进行压缩 这样一般情况下图片不会变大太多 而且质量不会下降太多 但是不能保证
对于其他格式的文件 那么就95%左右压缩成jpg好了 |
2
DearTanker OP @yyfearth 这也行?imagick可以做到吗,但是问题是设置100也会因为超过图片自己的质量设置而变模糊吗?
|
3
wowo2088 2015-01-16 16:06:42 +08:00
对于jpeg来讲,不损失图片质量那是不可能的,你需要考虑的是可以接受的质量损失程度
|
4
yyfearth 2015-01-16 16:10:06 +08:00
@DearTanker 我记得jpg图片一般会存储质量设置 可能有库可以读取吧
如果jpg文件之前已经用 < 100% 的设置压缩过 那么用100% 不会造成太大的损失 只要大小不变 不会变模糊 但是会有轻微的损失 其实一般情况下 95-98% 就基本上看不出来了 只是如果一个jpg已经是80%一下压缩 你用>90%从新压缩就比较浪费了 |
5
DearTanker OP @yyfearth 是的,但是怎么读取啊。。
我刚看到一篇文章说,如果需要对一张jpg进行处理,要先把jpg转换成其他格式后进行处理,然后在最后一步保存出来,不知道这样做有没有道理。。 http://floss.zoomquiet.io/data/20130822153054/index.html 里面的“JPEG图像文件格式” @wowo2088 |
6
wowo2088 2015-01-16 16:17:24 +08:00
使用 GD
$logoImage = ImageCreateFromPNG('logo.png'); // 装入 LOGO $photoImage = ImageCreateFromJpeg($file_name); // 装入一幅图象, 准备加盖水印 ImageAlphaBlending($photoImage, true); // 设定图像的混色模式 ImageCopy($photoImage, $logoImage, 0, 0, 0, 0, 200, 80); // 拷贝LOGO到图像中 ImageJPEG($photoImage,$out_file,70); // 以 JPEG 格式将图像输出到浏览器或文件,70是图片质量 ImageDestroy($photoImage); // 消除占用的资源 ImageDestroy($logoImage); |
7
DearTanker OP @wowo2088 GD的效果会更好吗?
|
8
DearTanker OP 正在尝试 「原图jpg=》(伪原图png+水印)*质量=》水印图jpg」这个处理过程。。
|
9
wowo2088 2015-01-16 16:22:50 +08:00
@DearTanker GD 和 imagick 没比较过,我只用 GD ~ 呵呵
|
10
jevonszmx 2015-01-16 16:57:26 +08:00 1
imagick 可以读取原压缩质量的
linux命令是:identify -verbose 1.jpg,可以grep 'Quality'看结果; php扩展后命令是:getimagecompressionquality; 注意: 生成目标图片的质量是: (水印后的图质量比)* 要生成的图片质量比 / 100 <?php $quality = 80; $img->getimagecompressionquality() * $quality / 100; $img->setimagecompressionquality($quality); ?> |
11
dingyaguang117 2015-01-16 17:09:40 +08:00
原来都不是100% 现在100% 是会变大的
|
12
DearTanker OP @jevonszmx PHP读取原压缩质量的命令是啥呢?
|
13
DearTanker OP @jevonszmx 、不好意思,你说的就是了= =囧。。。试试看~
|
14
DearTanker OP @dingyaguang117 是的。
|
15
DearTanker OP |
16
BGLL 2015-01-16 18:04:53 +08:00
jpeg 用了不可逆的算法 解码后再次编码一定会损失质量
质量优先就得转成其他无损格式比如 png 别再转成 jpeg 了 |
17
DearTanker OP @BGLL 有道理的,等测试结果。
|
18
explon 2015-01-16 18:07:24 +08:00
转成 PNG 加完水印然后调用 pngquant 压缩一下,就是原质量
|
19
bjzhush 2015-01-16 21:05:50 +08:00
你也可以考虑调用其它的语言及库来做这个事,如果PHP没有合适的方法的话,比如py
走file或者url都可以考虑,搭建一个服务 |
20
DearTanker OP @explon 谢谢。不过用其他语言不现实,公司的东西
|
21
DearTanker OP |
22
msg7086 2015-01-16 22:16:15 +08:00 via iPhone
@DearTanker 15楼。
违反宇宙常理了。 |