You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:15:38