我一直在尝试用ImageMagick做一些看似微不足道的事情,但我做不到。
我有一个透明的PNG(32位),我想用灰度图像(也是32位)掩盖那个。文件为32位的原因是它们是使用GIS工具生成的,默认情况下输出32位。我宁愿不必改变它,因为我的所有文件都已生成。
无论如何 - 这就是我现在用来做的事情:
convert \
alpha_channel.png \
\( \
mask.png \
-colorspace gray \
-alpha off \
\) \
-compose copy-opacity \
-composite \
PNG32:output.png
结果几乎正确,但我认为位深度存在一些问题。这很难解释,但您可以通过查看文件并将“output.png”与“expected_output.png”进行比较来轻松查看
以下是我正在使用的文件: https://www.dropbox.com/s/855fh8svgt45mqq/images.zip?dl=0
你认为我在这里做错了什么?
答案 0 :(得分:1)
在我看来,所有信息都在文件alpha通道的alpha通道中,但你使用的是该文件中的双层灰度值,而不是具有任何内容的实际信息。
Image: alpha_channel.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 4096x4096+0+0
Units: Undefined
Type: Bilevel
Base type: Bilevel
Endianess: Undefined
Colorspace: Gray
Depth: 8-bit
Channel depth:
gray: 1-bit
alpha: 8-bit
Channel statistics:
Pixels: 16777216
Gray:
min: 0 (0)
max: 255 (1)
mean: 228.324 (0.89539)
standard deviation: 78.0429 (0.30605)
kurtosis: 4.67613
skewness: -2.58382
mean: 41.3934 (0.162327)
standard deviation: 22.3399 (0.0876074)
kurtosis: -0.402954
skewness: 0.327285
Alpha: graya(0,0) #00000000
Colors: 118
Histogram:
1755067: ( 0, 0, 0, 0) #00000000 graya(0,0)
478353: (255,255,255, 37) #FFFFFF25 graya(255,0.145098)
378182: (255,255,255, 51) #FFFFFF33 graya(255,0.2)
374922: (255,255,255, 47) #FFFFFF2F graya(255,0.184314)
368496: (255,255,255, 39) #FFFFFF27 graya(255,0.152941)
362982: (255,255,255, 49) #FFFFFF31 graya(255,0.192157)
并且你也试图丢弃文件mask.png
的alpha通道,因为它没有alpha通道,所以它看起来并不正确。所以,我对你的信息到底在哪里,或者你真正想要提取的内容感到困惑。我只能建议以下内容似乎提取了我认为你可能想要的内容,但与你的期望完全不同。不过,它可能会帮助你进一步发展....
convert alpha_channel.png -alpha extract \
\( mask.png -colorspace gray \) \
-compose copy-opacity -composite out.png