【工具】png去除黑色背景

代码转自https://www.cnblogs.com/godzza/p/7428080.html
由本人进行C#编译,调用程序(C语言)的制作。
个人水平低下,只能做成这样
工具在:https://download.csdn.net/download/Fish22335/12317866
或者我的空间内

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
namespace ImageBlackToAlpha
{
    class Program
    {
        static byte Max(params byte[] values)
        {
            if (values == null || values.Length == 0)
                return 0;
            var max = values[0];
            for (var i = 1; i < values.Length; ++i)
            {
                max = Math.Max(max, values[i]);
            }
            return max;
        }

        static byte Min(params byte[] values)
        {
            if (values == null || values.Length == 0)
                return 0;
            var min = values[0];
            for (var i = 1; i < values.Length; ++i)
            {
                min = Math.Min(min, values[i]);
            }
            return min;
        }

        static void Main(string[] args)
        {
            if (args.Count() < 2)
            {
                Console.WriteLine("Usage: \"ImageBlackToAlpha\" [+ source] [destination [/F]]");
                Console.WriteLine(" source        InputPngPath ");
                Console.WriteLine(" destination   OutputPngPath");
                Console.WriteLine(" /F  Forces all RGB to White(254,254,254)");

                return;
            }

            var toWhite = false;
            var image = Image.FromFile(args[0]);
            var bitmap = new Bitmap(image);
            var save = new Bitmap(bitmap.Width, bitmap.Height);

            if (args.Count() == 3)
            {
                toWhite = args[2] == "/F" || args[2] == "/f";
            }

            for (var x = 0;x< bitmap.Width;++x)
            {
                for(var y = 0; y < bitmap.Height; ++y)
                {
                    var clr = bitmap.GetPixel(x, y);

                    if (toWhite)
                    {
                        // 只支持 纯黑白贴图
                        var alpha = (0 + clr.R + clr.G + clr.B) / 3;
                        alpha = Math.Min(clr.A, alpha);
                        //因为 纯白(RGB)而Alpha小于255 会出现 全透明的问题 所以不能使用 255//bug?
                        clr = Color.FromArgb(alpha, 254, 254, 254);
                    }
                    else
                    {
                        var max = Max(clr.R, clr.G, clr.B);
                        //因为 纯白(RGB)而Alpha小于255 会出现 全透明的问题 所以不能使用 255//bug?
                        var sub = 254 - max;
                        var alpha = Math.Min(clr.A, max);
                        clr = Color.FromArgb(alpha, clr.R + sub, clr.G + sub, clr.B + sub);
                    }
                    save.SetPixel(x, y, clr);
                }
            }
            
            save.MakeTransparent(Color.Transparent);
            save.Save(args[1], ImageFormat.Png);
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值