如何用ImageMagick还原带CSS rgba(0,0,0,.4)遮罩的PNG图像?
ImageMagick还原CSS半透明黑遮罩图片方案
原理说明
当原图被rgba(0,0,0,.4)的遮罩叠加时,像素值的计算逻辑是正常混合模式:
输出像素 = 原图像素 × (1 - 遮罩透明度) + 遮罩颜色 × 遮罩透明度
由于遮罩是纯黑(RGB值为0),代入透明度0.4后,公式简化为:
输出像素 = 原图像素 × 0.6
你之前使用-evaluate Multiply 2.5过曝,是因为错误采用了1/0.4的系数,正确的还原系数应为1/0.6 ≈ 1.6667。
通用还原命令
基础版
直接对每个通道执行除法运算(等价于乘以1.6667),适用于绝大多数场景:
convert masked_image.png -evaluate Divide 0.6 restored_image.png
或乘法形式:
convert masked_image.png -evaluate Multiply 1.6666667 restored_image.png
防过曝增强版
如果原图存在接近255的高亮像素,还原后可能出现像素值溢出(超过255),可添加-clamp参数限制色域范围:
convert masked_image.png -evaluate Multiply 1.6666667 -clamp restored_image.png
效果验证
针对你提供的示例图,执行上述命令后,像素值会精准还原到原图水平,避免过曝问题。
内容的提问来源于stack exchange,提问作者richarddmorey
相关产品推荐
相关产品推荐

