【发布时间】:2016-07-11 13:06:11
【问题描述】:
我正在尝试将 Android 应用程序资源(图标和背景)转换为与材质图标相同的格式(以节省空间并为它们着色):
$ identify -verbose ic_alarm_black_48dp.png
Image: ic_alarm_black_48dp.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 192x192+0+0
Units: Undefined
Type: Bilevel
Base type: Bilevel
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 1-bit
alpha: 8-bit
此图像具有 8 位深度和 1 位灰度通道深度。
这是我想转换为上述格式的测试图像(透明背景上有阴影的形状):
$ identify -verbose a.png
Image: a.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 256x256+0+0
Units: Undefined
Type: TrueColorAlpha
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
alpha: 8-bit
我希望得到一个带有 8 位 alpha 通道的 1 位灰度图像。
我觉得我需要将源图像转换为 1 位灰度图像(所有不透明像素设置为 1)并在顶部应用提取的 alpha 蒙版。
转换为 1 位灰度
`convert a.png -alpha extract -threshold 0 -negate -transparent white a-trans.png`
在顶部应用遮罩
`convert a-trans.png \( a.png -alpha extract \) -alpha off -compose copy_opacity -composite a-result.png`
$ identify -verbose a-result.png
Image: a-result.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 256x256+0+0
Units: Undefined
Type: Bilevel
Base type: Bilevel
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 1-bit
alpha: 8-bit
最后一张图片是我想要实现的。这种转换可以优化吗?
【问题讨论】:
-
你真正想做的是什么?你想把紫色的盘子变成黑白的吗?还是要有 8 位 alpha?还是要有 1 位颜色?如果你把它变成灰色,你会失去颜色!答案是什么样的?
-
答案是第一个(警报)和最后一个(黑色椭圆)图像。正如我所说,我希望得到一个具有 8 位 alpha 通道的 1 位灰度图像。我不需要颜色,因为之后图像会被着色。 Alpha 通道很重要。
标签: android imagemagick