【问题标题】:shrink my png with alpha channel使用 alpha 通道缩小我的 png
【发布时间】: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


【解决方案1】:

要在 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 减少到 indexed-PNG:

convert rgba.png -flatten -alpha off -colors 255 indexed-flattened.png
pngcrush -reduce -brute -rem alla indexed-flattened.png indexed.png

【讨论】:

    【解决方案2】:

    不太确定你真正想要什么,但也许这会让你朝着正确的方向前进。如果您想要“褪色的外观”,您通常可以通过降低图像的对比度来实现这一点 - 使黑色变得比黑色更灰,白色变得比白色更灰,或者通过减少饱和度会降低颜色强度,使图片不那么鲜艳或更倾向于黑白。

    因此,您可以执行以下操作来丢弃 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
    

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 1970-01-01
      • 2022-11-07
      • 2018-10-25
      • 2011-10-30
      • 2011-10-29
      • 2011-06-06
      • 1970-01-01
      • 2011-06-30
      相关资源
      最近更新 更多