Skip to content
MagickCmd › ImageMagick 透明通道处理

ImageMagick 透明通道处理

把某个颜色抠成透明、把透明压到背景色上、完全移除 alpha 通道、把 alpha 提取成遮罩。含透明 PNG 转 JPEG 变黑的解决办法。

把某个颜色抠成透明

magick input.png -fuzz 15% -transparent white output.png

-fuzz 容差是让这招真正可用的关键 —— 不加的话只有颜色完全一致的像素会被处理,抗锯齿的边缘会留下一圈明显的白边。

这招只对纯色、人工合成的背景有效 —— logo、截图、纯白底的产品图。用在照片上,画面里任何接近那个颜色的地方都会被一起挖穿:白云、白衬衫、皮肤上的高光。-fuzz 要一点点往上加并随时检查结果,12–20% 是个合理区间。

输出必须是 PNG 或 WebP。写成 JPEG 会把你刚做出来的透明直接丢掉,而且不会报错。

真正意义上的抠背景

对真实照片来说,按颜色抠是错的工具。ImageMagick 没有主体识别能力,你需要一个专门的背景移除模型(rembg 之类),之后再用 ImageMagick 做别的处理。

把透明压到纯色背景上

magick input.png -background white -alpha remove -alpha off output.jpg

这是「透明 PNG 转 JPEG 变黑」的正确解法。-alpha remove 把图合成到 -background 上,-alpha off 再丢掉已经多余的通道让文件更小。

-flatten 效果类似,但它还会合并图层偏移 —— 如果文件带着之前裁切留下的虚拟画布(非常常见,GIF 帧更是标配),-flatten 会按那个偏移摆放图片,结果就是莫名其妙的留白或错位。-alpha remove 只动 alpha 通道,更可预测。

设置整体不透明度

magick input.png -alpha set -channel A -evaluate multiply 0.5 +channel output.png
  • -alpha set 在图片没有 alpha 通道时建一个。
  • -channel A 让接下来的操作只作用于 alpha。
  • +channel 切回来。漏写是经典 bug —— 后面所有操作都会只动 alpha。

把 alpha 提取成灰度遮罩

magick input.png -alpha extract mask.png

你会得到一张灰度图,白色是不透明、黑色是透明。用来排查边缘为什么不对,或者把遮罩交给别的工具。

检查图片有没有透明

magick identify -format '%[opaque] %A\n' input.png

%[opaque]true 表示没有任何透明像素,%A 表示是否存在 alpha 通道。两者可能不一致 —— 一个文件可以带着一个完全不透明的 alpha 通道。

把一种颜色替换成另一种

magick input.png -fuzz 10% -fill '#0d9488' -opaque white output.png

-opaque-transparent 的颜色替换版本。


相关页面

Copied