为什么GraphicsMagick使用opaque与fill做1:1颜色替换功能失效?
Node.js+GraphicsMagick 精确替换PNG指定颜色方案
问题原因
GraphicsMagick 执行颜色替换操作时默认带有颜色匹配容差,opaque方法会自动将和目标色值接近的颜色也判定为待替换范围,因此会出现非目标区域被错误改动的问题。
解决方法
在调用opaque前显式设置fuzz参数为0,强制仅匹配完全相同的色值,无任何匹配容差。
正确实现代码
const gm = require('gm'); gm('./in.png') .fuzz(0) // 关闭颜色容差,仅匹配完全一致的色值 .fill('black') .opaque('#ccffff') .write('./out.png', (err) => { if (err) return console.error('颜色替换失败:', err); console.log("重着色文件已保存"); });
参数说明
如果你的源图片存在目标色值轻微色差、或者半透明匹配需求,可以根据实际效果调整fuzz的数值,单位支持百分比,例如.fuzz('2%')代表允许和目标色值相差2%以内的颜色也被替换。
示例素材
- 输入原图:

- 错误输出图:

内容的提问来源于stack exchange,提问作者Gerd
相关产品推荐
相关产品推荐

