zoukankan      html  css  js  c++  java
  • 九宫格水印类

    九宫格水印
    public class WaterPicture
    {
    /// <summary>
    /// 加图片水印
    /// </summary>
    /// <param name="img">来源System.Drawing.Image对象</param>
    /// <param name="filename">完成后保存文件路径(物理路径)</param>
    /// <param name="watermarkFilename">水印文件路径(物理路径)</param>
    /// <param name="watermarkStatus">图片水印位置(9宫格位置1-9)</param>
    /// <param name="quality">图片质量(1-100)</param>
    /// <param name="watermarkTransparency">透明度(1-10)</param>
    public static void AddImageSignPic(Image img, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
    {
    Graphics g
    = Graphics.FromImage(img);
    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="filename">文件名</param>
    /// <param name="watermarkText">水印文字</param>
    /// <param name="watermarkStatus">图片水印位置</param>
    public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)
    {

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


    /// <summary>
    ///(重载) 增加图片文字水印
    /// </summary>
    /// <param name="filename">文件名</param>
    /// <param name="watermarkText">水印文字</param>
    /// <param name="watermarkStatus">图片水印位置</param>
    /// <param name="fontcolor">图片水印颜色</param>
    public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize, string fontcolor)
    {

    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(ColorTranslator.FromHtml(fontcolor)), xpos, ypos);
    //g.DrawString(watermarkText, drawFont, new SolidBrush(Color.FromName(fontcolor)), 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();
    }

    }
  • 相关阅读:
    CRM导入解决方案后审核记录异常
    Plugin从Sync改为Async后报Could not load file or assembly错误
    阿里云四层SLB和七层SLB的区别
    PLUGIN中初始化Service-IOrganizationServiceFactory.CreateOrganizationService 方法
    Dynamics CRM启用Trace跟踪
    QueryExpression查询中的OR写法
    Dynamics CRM安装过程中可能遇到的报错
    多台服务器情况下Microsoft Dynamics CRM Server后端服务器的高可用探讨
    【转】Network Load Balancing Microsoft Dynamics CRM 2013
    iOS 开发的非常有用 第三方库
  • 原文地址:https://www.cnblogs.com/cancer_xu/p/1686915.html
Copyright © 2011-2022 走看看