图片添加水印

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

class a

{

 

//添加图片水印的方法:

 

///

    /// 加图片水印

    ///

    /// 文件名

    /// 水印文件名

    /// 图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下

    /// 附加图片质量,1 0不是

    /// 水印的透明度 1--10 10为不透明

    public static void AddImageSignPic(Image img, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)

    {

        Graphics g = Graphics.FromImage(img);

        //设置高质量插值法

        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

        //设置高质量,低速度呈现平滑程度

        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        Image watermark = new Bitmap(watermarkFilename);

 

        if (watermark.Height >= img.Height || watermark.Width >= img.Width)

        {

            return;

        }

 

        ImageAttributes imageAttributes = new ImageAttributes();

        ColorMap colorMap = new ColorMap();

 

        colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);

        colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);

        ColorMap[] remapTable = { colorMap };

 

        imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

 

        float transparency = 0.5F;

        if (watermarkTransparency >= 1 && watermarkTransparency <= 10)

        {

            transparency = (watermarkTransparency / 10.0F);

        }

 

        float[][] colorMatrixElements = {

                                                new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},

                                                new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},

                                                new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},

                                                new float[] {0.0f,  0.0f,  0.0f,  transparency, 0.0f},

                                                new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}

                                            };

 

        ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

 

        imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

 

        int xpos = 0;

        int ypos = 0;

 

        switch (watermarkStatus)

        {

            case 1:

                xpos = (int)(img.Width * (float).01);

                ypos = (int)(img.Height * (float).01);

                break;

            case 2:

                xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));

                ypos = (int)(img.Height * (float).01);

                break;

            case 3:

                xpos = (int)((img.Width * (float).99) - (watermark.Width));

                ypos = (int)(img.Height * (float).01);

                break;

            case 4:

                xpos = (int)(img.Width * (float).01);

                ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));

                break;

            case 5:

                xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));

                ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));

                break;

            case 6:

                xpos = (int)((img.Width * (float).99) - (watermark.Width));

                ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));

                break;

            case 7:

                xpos = (int)(img.Width * (float).01);

                ypos = (int)((img.Height * (float).99) - watermark.Height);

                break;

            case 8:

                xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));

                ypos = (int)((img.Height * (float).99) - watermark.Height);

                break;

            case 9:

                xpos = (int)((img.Width * (float).99) - (watermark.Width));

                ypos = (int)((img.Height * (float).99) - watermark.Height);

                break;

        }

 

        g.DrawImage(watermark, new Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);

        //g.DrawImage(watermark, new System.Drawing.Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, System.Drawing.GraphicsUnit.Pixel);

 

        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        ImageCodecInfo ici = null;

        foreach (ImageCodecInfo codec in codecs)

        {

            if (codec.MimeType.IndexOf("jpeg") > -1)

            {

                ici = codec;

            }

        }

        EncoderParameters encoderParams = new EncoderParameters();

        long[] qualityParam = new long[1];

        if (quality < 0 || quality > 100)

        {

            quality = 80;

        }

        qualityParam[0] = quality;

 

        EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);

        encoderParams.Param[0] = encoderParam;

 

        if (ici != null)

        {

            img.Save(filename, ici, encoderParams);

        }

        else

        {

            img.Save(filename);

        }

 

        g.Dispose();

        img.Dispose();

        watermark.Dispose();

        imageAttributes.Dispose();

    }

 

 

 

 

//下面这个是添加文字水印的方法

 

 

 

 ///

    /// 增加图片文字水印

    ///

    /// 文件名

    /// 水印文字

    /// 图片水印位置

    public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)

    {

        //System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(img);

        //    .FromFile(filename);

        Graphics g = Graphics.FromImage(img);

        Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);

        SizeF crSize;

        crSize = g.MeasureString(watermarkText, drawFont);

 

        float xpos = 0;

        float ypos = 0;

 

        switch (watermarkStatus)

        {

            case 1:

                xpos = (float)img.Width * (float).01;

                ypos = (float)img.Height * (float).01;

                break;

            case 2:

                xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);

                ypos = (float)img.Height * (float).01;

                break;

            case 3:

                xpos = ((float)img.Width * (float).99) - crSize.Width;

                ypos = (float)img.Height * (float).01;

                break;

            case 4:

                xpos = (float)img.Width * (float).01;

                ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);

                break;

            case 5:

                xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);

                ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);

                break;

          case 6:

                xpos = ((float)img.Width * (float).99) - crSize.Width;

                ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);

                break;

            case 7:

                xpos = (float)img.Width * (float).01;

                ypos = ((float)img.Height * (float).99) - crSize.Height;

                break;

            case 8:

                xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);

                ypos = ((float)img.Height * (float).99) - crSize.Height;

                break;

            case 9:

                xpos = ((float)img.Width * (float).99) - crSize.Width;

                ypos = ((float)img.Height * (float).99) - crSize.Height;

                break;

        }

 

        g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);

        g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Black), xpos, ypos);

 

        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        ImageCodecInfo ici = null;

        foreach (ImageCodecInfo codec in codecs)

        {

            if (codec.MimeType.IndexOf("jpeg") > -1)

            {

                ici = codec;

            }

        }

        EncoderParameters encoderParams = new EncoderParameters();

        long[] qualityParam = new long[1];

        if (quality < 0 || quality > 100)

        {

            quality = 80;

        }

        qualityParam[0] = quality;

 

        EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);

        encoderParams.Param[0] = encoderParam;

 

        if (ici != null)

        {

            img.Save(filename, ici, encoderParams);

        }

        else

        {

            img.Save(filename);

        }

        g.Dispose();

        //bmp.Dispose();

        img.Dispose();

    }

 

 

//这个是我测试用的代码

 

 

 

 //Image img = Image.FromStream(this.FileUpload1.PostedFile.InputStream);

 //       string filename = Server.MapPath("img/test1.jpg");

 //       string watername = Server.MapPath("img/11.jpg");

 //       WaterMark.AddImageSignPic(img, filename, watername, 1, 100, 6);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值