Imagemagick 用灰度图像遮罩alpha通道

Imagemagick 用灰度图像遮罩alpha通道,imagemagick,Imagemagick,我一直在尝试用ImageMagick做一些看似琐碎的事情,但我做得不对 我有一个透明的PNG(32位),我想用灰度图像(也是32位)遮罩它。文件为32位的原因是,它们是使用默认输出32位的GIS工具生成的。我宁愿不改变,因为我的所有文件都已经生成了 无论如何-这就是我现在用来做的: convert \ alpha_channel.png \ \( \ mask.png \

我一直在尝试用ImageMagick做一些看似琐碎的事情,但我做得不对

我有一个透明的PNG(32位),我想用灰度图像(也是32位)遮罩它。文件为32位的原因是,它们是使用默认输出32位的GIS工具生成的。我宁愿不改变,因为我的所有文件都已经生成了

无论如何-这就是我现在用来做的:

convert                 \
  alpha_channel.png     \
   \(                   \
      mask.png          \
       -colorspace gray \
       -alpha off       \
   \)                   \
 -compose copy-opacity  \
 -composite             \
  PNG32:output.png
结果几乎是正确的,但我认为钻头深度存在一些问题。这很难解释,但通过查看文件并将“output.png”与“expected_output.png”进行比较,您可以很容易地看到它

以下是我正在处理的文件:


您认为我做错了什么?

在我看来,所有信息都在文件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

您的
convert-version
命令的输出是什么?您好。我现在不在我的工作站测试它,但我已经安装了最新的Windows二进制文件。6.9我相信。谢谢。当谈到ImageMagick时,你暴露了我的无知:)我不确定我的命令在做什么,但在长时间的Google会话后,它看起来可以做我想做的事情,但显然没有。看起来我没有很好地解释最终结果,所以让我在这里尝试一下……结果图像将在Unity3D中用于置换着色器。由于技术原因,图像不能像alpha_channel.png那样只是灰度图像,它必须具有透明度,并且工作正常。我还需要用mask.png屏蔽它,同时保持透明度。这更清楚吗?您可以打开expected_output.png以查看所需结果。我在photoshop中使用mask.png作为alpha_channel.png.Mmm上的层掩码创建了该图像,我根本看不到你做了什么!!!我在Photoshop中打开alpha_通道并添加了掩码作为掩码,它看起来与您预期的输出不一样。然后,我将您的预期输出叠加在顶部,并选择了
差异
混合模式,如果没有差异,但差异巨大,则该模式应为黑色。你在Photoshop中还做了一些其他的步骤吗?这是我的Photoshop文件:当我试图像你一样用expected_output.png覆盖它时,我也注意到了差异。我认为这是因为压缩或其他原因。我已经找到了一个不错的解决方案,尽管这是一个两步的过程。我认为这可以一步完成
convert mask.png-背景红色-否定-alpha形状mask_shape.png
convert alpha_channel.png mask_shape.png-compose DstOut-composite output.png
也许你可以从这两个步骤中看出我想要做什么。