用 alpha 通道缩小我的 png
shrink my png with alpha channel
首先,我不是图形程序员,我可能不知道我想做的事情的正确术语。我知道我想做什么,但我不知道怎么做。我将尝试描述我想要的内容,但请记住,我可能会错误地使用术语。也许有比我认为我需要做的更好的方法来做我想做的事。
我的主要目标是:我有一张大约 250000 字节的图片,我想缩小文件大小。
请注意,原始图片是全亮度的,但我使用了 gimp(可能不正确)使它具有褪色的外观。我认为它现在有一个 "alpha channel" 和一些不透明度百分比值。所以我认为图片在 rgb 通道中存储为全亮度,并且还有另一个 alpha 通道描述图片的 "fadedness"。图像应该淡化为 "white" - 它将放置在白色背景上,上面会有深色文本 - 但我认为我还没有在图像中存储最后一点信息(还)。
所以这就是我试图到达那里的方法:我认为如果我只在 rgb 通道中指定褪色图片的实际像素值并取消 alpha 通道,图片可能会更小。此外,总体上应该有更少的颜色,我可以使用彩色贴图,使图片更小。褪色的图片褪色到足以让文字在上面书写时清晰可见 - 即它已经褪色 - 因此颜色应该比全亮度版本少很多。
但是我不知道该怎么做,也不知道在文档中查找什么。我尝试了几个 "compression" 程序,得到的最佳压缩率约为 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(便携式网络图形)
Class:直接Class
几何: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)
隔行扫描:None
底色:白色
边框颜色:srgba(223,223,223,1)
哑光色:grey74
透明色:none
撰写:结束
页面几何尺寸:799x152+0+0
处置:未定义
迭代次数:0
压缩:邮编
方向:未定义
特性:
date:create: 2015-03-21T19:32:58-04:00
date:modify: 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.宽度,高度: 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% 最佳压缩率的一种。但是,考虑到我完全愿意丢失信息(对保留原始亮度信息不感兴趣),这张图片肯定可以压缩得更多?
不太确定您真正想要什么,但也许这会让您朝着正确的方向前进。如果你想要一个“褪色的外观”,你通常可以通过降低图像的对比度来实现——这样黑色变得比黑色更灰,白色变得比白色更灰,或者通过降低饱和度来降低颜色强度,使图片不那么鲜艳或更倾向于黑白。
因此,您可以执行以下操作以放弃 alpha 通道(透明度)并降低对比度并减少图像中的颜色数量。文件大小从 250kB 下降到 62kB - 但它可能不是你想要的...
convert yourPengy.png -alpha off +level 65%,95% -colors 256 myPengy.png
或者这可能更接近您想要的,饱和度降低到 80%,为 62kB
convert yourPengy.png -alpha off -modulate 100,80 +level 55%,95% -colors 256 myPengy.png
要在 png bKGD 块的白色背景下合成透明图像,使用您创建的 alpha 通道,您可以这样做
convert rgba.png -flatten -alpha off rgb-flattened.png
然后优化压缩并删除一些辅助块
ImageMagick 插入,
pngcrush -reduce -brute -rem alla rgb-flattened.png rgb.png
请注意选项“-alpha off”和“-flatten”的顺序很重要。
如果您先关闭“-alpha”,则在展平过程中不会使用 alpha 通道,您最终会得到原始的未褪色图像。
编辑:为了进一步优化,使用 -colors 255 将图像从 RGBA-PNG 减少为索引 PNG:
convert rgba.png -flatten -alpha off -colors 255 indexed-flattened.png
pngcrush -reduce -brute -rem alla indexed-flattened.png indexed.png
首先,我不是图形程序员,我可能不知道我想做的事情的正确术语。我知道我想做什么,但我不知道怎么做。我将尝试描述我想要的内容,但请记住,我可能会错误地使用术语。也许有比我认为我需要做的更好的方法来做我想做的事。
我的主要目标是:我有一张大约 250000 字节的图片,我想缩小文件大小。
请注意,原始图片是全亮度的,但我使用了 gimp(可能不正确)使它具有褪色的外观。我认为它现在有一个 "alpha channel" 和一些不透明度百分比值。所以我认为图片在 rgb 通道中存储为全亮度,并且还有另一个 alpha 通道描述图片的 "fadedness"。图像应该淡化为 "white" - 它将放置在白色背景上,上面会有深色文本 - 但我认为我还没有在图像中存储最后一点信息(还)。
所以这就是我试图到达那里的方法:我认为如果我只在 rgb 通道中指定褪色图片的实际像素值并取消 alpha 通道,图片可能会更小。此外,总体上应该有更少的颜色,我可以使用彩色贴图,使图片更小。褪色的图片褪色到足以让文字在上面书写时清晰可见 - 即它已经褪色 - 因此颜色应该比全亮度版本少很多。
但是我不知道该怎么做,也不知道在文档中查找什么。我尝试了几个 "compression" 程序,得到的最佳压缩率约为 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(便携式网络图形) Class:直接Class 几何: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) 隔行扫描:None 底色:白色 边框颜色:srgba(223,223,223,1) 哑光色:grey74 透明色:none 撰写:结束 页面几何尺寸:799x152+0+0 处置:未定义 迭代次数:0 压缩:邮编 方向:未定义 特性: date:create: 2015-03-21T19:32:58-04:00 date:modify: 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.宽度,高度: 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% 最佳压缩率的一种。但是,考虑到我完全愿意丢失信息(对保留原始亮度信息不感兴趣),这张图片肯定可以压缩得更多?
不太确定您真正想要什么,但也许这会让您朝着正确的方向前进。如果你想要一个“褪色的外观”,你通常可以通过降低图像的对比度来实现——这样黑色变得比黑色更灰,白色变得比白色更灰,或者通过降低饱和度来降低颜色强度,使图片不那么鲜艳或更倾向于黑白。
因此,您可以执行以下操作以放弃 alpha 通道(透明度)并降低对比度并减少图像中的颜色数量。文件大小从 250kB 下降到 62kB - 但它可能不是你想要的...
convert yourPengy.png -alpha off +level 65%,95% -colors 256 myPengy.png
或者这可能更接近您想要的,饱和度降低到 80%,为 62kB
convert yourPengy.png -alpha off -modulate 100,80 +level 55%,95% -colors 256 myPengy.png
要在 png bKGD 块的白色背景下合成透明图像,使用您创建的 alpha 通道,您可以这样做
convert rgba.png -flatten -alpha off rgb-flattened.png
然后优化压缩并删除一些辅助块 ImageMagick 插入,
pngcrush -reduce -brute -rem alla rgb-flattened.png rgb.png
请注意选项“-alpha off”和“-flatten”的顺序很重要。 如果您先关闭“-alpha”,则在展平过程中不会使用 alpha 通道,您最终会得到原始的未褪色图像。
编辑:为了进一步优化,使用 -colors 255 将图像从 RGBA-PNG 减少为索引 PNG:
convert rgba.png -flatten -alpha off -colors 255 indexed-flattened.png
pngcrush -reduce -brute -rem alla indexed-flattened.png indexed.png