C# 图片背景变为透明

C#  图片背景变为透明

今天遇到从身份证读取信息粘贴到身份证模板身份身份证图片的需求,但是获取的身份证头像是带背景色的所以需要去掉背景色。CSDN找了半天都是bitmap.MakeTransparent

这种只适用于纯色,但一般图片背景都不会是纯色就会很麻烦,只能通过遍历像素来修改像素点的颜色然后再透明。下面是效果和源码,小白第一次分享,有错误请大佬斧正。

原图

C# 图片背景变为透明_第1张图片

处理后

C# 图片背景变为透明_第2张图片

public static Image GetImage(Image image)
        {
            // 高度和宽度
            int height = image.Height;
            int width = image.Width;

            // 生产背景透明和内容透明的图片
            Bitmap bitmap = new Bitmap(image);
            //bitmap.SetResolution(72, 72);
            Graphics graphics = Graphics.FromImage(bitmap);
            graphics.DrawImage(bitmap, 0, 0);
            int alpha = 0; // 图片透明度
                           // 外层遍历是Y轴的像素

            for (int y = 0; y < bitmap.Height; y++)
            {
                // 内层遍历是X轴的像素
                for (int x = 0; x < bitmap.Width; x++)
                {
                    int rgb = bitmap.GetPixel(x, y).ToArgb();
                    // 对当前颜色判断是否在指定区间内
                    if (colorInRange(rgb))
                    {
                        alpha = 0;
                    }
                    else
                    {
                        // 设置为不透明
                        alpha = 255;
                    }
                    // #AARRGGBB 最前两位为透明度
                    rgb = (alpha << 24) | (rgb & 0x00ffffff);
                    bitmap.SetPixel(x, y, Color.FromArgb(rgb));
                }
            }

            // 绘制设置了RGB的新图片,这一步感觉不用也可以只是透明地方的深浅有变化而已,就像蒙了两层的感觉
            //graphics.DrawImage(bitmap, 0, 0);

            // 生成图片为PNG
            return bitmap;

        }

        //色差范围0~255
        public static int color_range = 190;//0是纯黑,255是纯白。190以上 全部改为透明。0也改为透明,

        // 判断是背景还是内容
        public static bool colorInRange(int color)
        {
            int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
            int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
            int blue = (color & 0x0000ff);// 获取color(RGB)中B位

            if (red == 0 && green == 0 && blue == 0)
            {
                return true;
            }

            // 通过RGB三分量来判断当前颜色是否在指定的颜色区间内
            if (red >= color_range && green >= color_range && blue >= color_range)
            {
                return true;
            };
            return false;
        }

你可能感兴趣的:(c#)