PCX转PNG时透明背景显示异常的技术求助
问题:PCX转PNG时保留透明背景与黑色线条
我的目标是将带有透明背景和黑色线条/草图的PCX图片转换为PNG格式。我尝试了以下转换命令:
magick convert abc.pcx abc.png magick convert abc.pcx -flatten abc.png magick convert abc.pcx -background white -flatten abc.png
我还尝试通过编程实现转换(这是我的最终目标),但效果不理想:
using (var magickImage = new MagickImage(file)) { magickImage.Format = MagickFormat.Png; // 这个方法有点效果,能把背景变成透明,但线条/草图上出现白色边缘, // 而且只有草图区域是黑色的,不符合我需要的「透明背景+纯黑色线条」的效果 // magickImage.FloodFill(MagickColors.Transparent, 0, 0); var filePng = Path.ChangeExtension(file, ".png"); magickImage.Write(filePng); }
补充说明:该PCX图片在Adobe Express中显示正常(透明背景搭配黑色线条),但在ImageMagick的IMDisplay中显示为黑色背景搭配白色线条。
解决办法
命令行方案
直接反转图像颜色,再将原背景对应的颜色设为透明:
magick convert abc.pcx -negate -transparent white abc.png
逻辑:ImageMagick把PCX解析成了黑底白线,-negate 将颜色反转成白底黑线,再用 -transparent white 把白色背景替换为透明,最终得到透明背景+黑色线条的PNG。
编程方案(Magick.NET)
对应命令行逻辑,在代码中实现颜色反转和透明化:
using (var magickImage = new MagickImage(file)) { // 反转颜色,把白色线条转为黑色,黑色背景转为白色 magickImage.Negate(); // 将白色背景设置为透明 magickImage.Transparent(MagickColors.White); magickImage.Format = MagickFormat.Png; var filePng = Path.ChangeExtension(file, ".png"); magickImage.Write(filePng); }
如果转换后线条有杂色边缘,可添加模糊+阈值处理优化:
using (var magickImage = new MagickImage(file)) { magickImage.Negate(); // 轻微模糊消除边缘杂色,阈值处理强化线条清晰度 magickImage.Blur(0, 1); magickImage.Threshold(new Percentage(50)); magickImage.Transparent(MagickColors.White); magickImage.Format = MagickFormat.Png; var filePng = Path.ChangeExtension(file, ".png"); magickImage.Write(filePng); }
内容的提问来源于stack exchange,提问作者piris
相关产品推荐
相关产品推荐

