zoukankan      html  css  js  c++  java
  • 常用工具类10-上传水印类

    public class WaterMark
    {
    /// <summary>
    /// 图片水印
    /// </summary>
    /// <param name="imgPath">服务器图片相对路径</param>
    /// <param name="filename">保存文件名</param>
    /// <param name="watermarkFilename">水印文件相对路径</param>
    /// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
    /// <param name="quality">附加水印图片质量,0-100</param>
    /// <param name="watermarkTransparency">水印的透明度 1--10 10为不透明</param>
    public static void AddImageSignPic(string imgPath, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
    {
    if (!File.Exists(Utils.GetMapPath(imgPath)))
    return;
    byte[] _ImageBytes = File.ReadAllBytes(Utils.GetMapPath(imgPath));
    Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
    filename = Utils.GetMapPath(filename);

    if (watermarkFilename.StartsWith("/") == false)
    watermarkFilename = "/" + watermarkFilename;
    watermarkFilename = Utils.GetMapPath(watermarkFilename);
    if (!File.Exists(watermarkFilename))
    return;
    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);

    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();
    }

    /// <summary>
    /// 文字水印
    /// </summary>
    /// <param name="imgPath">服务器图片相对路径</param>
    /// <param name="filename">保存文件名</param>
    /// <param name="watermarkText">水印文字</param>
    /// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
    /// <param name="quality">附加水印图片质量,0-100</param>
    /// <param name="fontname">字体</param>
    /// <param name="fontsize">字体大小</param>
    public static void AddImageSignText(string imgPath, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)
    {
    byte[] _ImageBytes = File.ReadAllBytes(Utils.GetMapPath(imgPath));
    Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
    filename = Utils.GetMapPath(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();
    img.Dispose();
    }
    }

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/5605541.html
Copyright © 2011-2022 走看看