【发布时间】:2015-03-23 03:23:19
【问题描述】:
首先,我不是图形程序员,我可能不知道我想做的事情的正确术语。我知道我想做什么,但我不知道怎么做。我将尝试描述我想要的内容,但请记住我可能会错误地使用术语。也许有比我认为我需要做的更好的方法来做我想做的事。
我的主要目标是:我有一张大小约为 250000 字节的图片,我想缩小文件大小。
请注意,原始图片是全亮度的,但我使用了 gimp(可能不正确)使其具有褪色的外观。我认为它现在有一个带有一些不透明度百分比值的“alpha 通道”。所以我认为图片在 rgb 通道中存储为全亮度,并且还有另一个 alpha 通道描述了图片的“褪色”。图像应该淡化为“白色”——它将被放置在白色背景上,并且上面会有深色文本——但我认为我还没有在图像中存储最后一点信息。
所以这就是我试图到达那里的方式:我认为如果我只在 rgb 通道中指定褪色图片的实际像素值并取消 alpha 通道,图片可能会更小。此外,整体颜色应该更少,我可以使用颜色图,使图片更小。褪色的图片褪色到足以让文字在其上书写时清晰可辨 - 即它已经褪色了 - 因此颜色应该比全亮度版本少得多。
但是我不知道该怎么做,或者在文档中寻找什么。我尝试了一些“压缩”程序,我得到的最佳压缩率约为 2.5%。显然我没有找对地方,因为我认为它应该压缩到比这小得多。
这是 imagemagick “identify -verbose”的输出:
bjb@rhino:~/work/mojatatu/admin/2015/web/foo/img/work$ identify -verbose ../orig/joanrobins-penguins-snow-banner-faded.png 图片:../orig/joanrobins-penguins-snow-banner-faded.png 格式:PNG(便携式网络图形) 类:直接类 几何:799x152+0+0 分辨率:137.8x137.8 打印尺寸:5.79826x1.10305 单位:像素每厘米 类型:TrueColorAlpha 字节序:未定义 色彩空间:sRGB 深度:8位 通道深度: 红色:8 位 绿色:8位 蓝色:8 位 阿尔法:8位 频道统计: 红色的: 分钟:0 (0) 最大:255 (1) 平均值:145.053 (0.568837) 标准差:51.0466 (0.200183) 峰度:0.897068 偏度:-1.18367 绿色的: 分钟:0 (0) 最大值:253 (0.992157) 平均值:152.236 (0.597003) 标准差:53.6199 (0.210274) 峰度:0.941151 偏度:-1.2307 蓝色: 分钟:0 (0) 最大值:251 (0.984314) 平均值:164.608 (0.645521) 标准差:56.552 (0.221772) 峰度:1.13143 偏度:-1.37866 Α: 分钟:84 (0.329412) 最大值:84 (0.329412) 平均值:84 (0.329412) 标准差:0 (0) 峰度:0 偏度:0 图片统计: 全面的: 分钟:0 (0) 最大:255 (1) 平均值:158.224 (0.620487) 标准差:46.5805 (0.182669) 峰度:2.94443 偏度:-1.70687 渲染意图:感知 伽玛:0.454545 色度: 红色初级:(0.64,0.33) 绿色初级:(0.3,0.6) 蓝色主要:(0.15,0.06) 白点:(0.3127,0.329) 隔行扫描:无 背景颜色:白色 边框颜色:srgba(223,223,223,1) 哑光颜色:灰色74 透明色:无 作曲:结束 页面几何尺寸:799x152+0+0 处置:未定义 迭代次数:0 压缩:邮编 方向:未定义 特性: 日期:创建:2015-03-21T19:32:58-04:00 日期:修改:2015-03-21T19:32:58-04:00 png:bKGD :找到了块(参见上面的背景颜色) png:cHRM :找到了块(参见上面的色度) png:gAMA : gamma=0.45454544(参见上面的 Gamma) png:IHDR.bit_depth : 8 png:IHDR.color_type : 6 (RGBA) png:IHDR.interlace_method: 0(不隔行扫描) png:IHDR.width,height : 799, 152 png:pHYs : x_res=13780, y_res=13780, 单位=1 png:sRGB : intent=0(请参阅渲染意图) 签名:6ceec80b4c3c05a631de400d74928ca4cb86bd9f304676ecd4a475b874a71cfc 神器: 文件名:../orig/joanrobins-penguins-snow-banner-faded.png 详细:真 污染:错误 文件大小:248KB 像素数:121K 每秒像素数:0B 用户时间:0.000u 经过时间:0:01.000 版本:ImageMagick 6.7.7-10 2014-03-08 Q16 http://www.imagemagick.org我查看了一些 ImageMagick 文档并尝试了以下大多数工具(我还不得不缩小 .jpg 文件,发现 jpegoptim 效果很好)。
Setting up advancecomp (1.15-1) ... advpng -z4 file.png. didn't see any compression
Setting up jpegoptim (1.2.3-2+b2) ... two thumbs up - easy and effective
Setting up optipng (0.6.4-1) ...
Setting up pngcrush (1.7.9-1) ...
Setting up pngnq (1.0-2) ...
Setting up pngquant (1.0-4.1) ...
Setting up trimage (1.0.5-1) ...
imagemagic convert
convert
-clut (apply a color lookup table to the image)
-hald-clut
-unique-colors
-quantize colorspace <- reduce colors in this colorspace
-posterize levels <- reduce the image to a limited number of color levels
-modulate value <- vary the brightness, saturation, and hue
-layers method optimize or compare image layers
-fuzz distance colors within this distance are considered equal
-depth value image depth
-alpha remove
on, activate, off, deactivate, set, opaque, copy", transparent, extract, background, or shape the alpha channel
-background white
- colors value preferred number of colors in the image
- colorspace type set image colorspace
我也尝试将图片转换为 jpg 并转换回 png,希望它会做我想要的,但它将全亮度版本保存为 jpg 并再次返回为 png,可能丢失了 alpha 通道信息.
pngcrush -brute 尝试了 100 多种压缩技术并选择了最好的一种,它提供了大约 2.5% 的最佳压缩率。但是,考虑到我完全愿意丢失信息(对保留原始亮度信息不感兴趣),这张图片肯定可以压缩得更多吗?
【问题讨论】:
-
Mmmmm... 您的 Alpha 通道(透明度)在您描述的任何地方都没有出现 淡化 - 它在您的图像中是一个常数 84。如果你能发布你的图片会有所帮助。
-
你是对的,我似乎错误地使用了“fade”这个词。图片的 alpha 为 84,这就是我想要的效果。我试图用英语来描述它,但我猜“淡入淡出”通常用于“透明度渐变”,而我将它用于“不断褪色的外观”。图片在netdev01.org/static/img/…。
-
我很难在 Glenn 和 Mark 的答案之间做出选择……Mark 的尺寸最小,但 Glenn 最直接地回答了我的问题。最后,我使用了 Glenn 的答案,但添加了 Mark 的选项 -color 256 以进一步减小文件大小。
-
我很高兴能在 Glenn 这样的顶级人物之后获得第二名,很高兴我们能帮助你:-)
-
@BrendaJ.Butler,通常最好使用 -colors 255 而不是 256,以便为调色板中的背景颜色留出空间。我相应地编辑了我的答案。
标签: compression alpha-transparency