/// <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(, , , );
            colorMap.NewColor = Color.FromArgb(, , , );
            ColorMap[] remapTable = { colorMap };

            imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

            float transparency = 0.5F;
             && watermarkTransparency <= )
                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);

            ;
            ;

            switch (watermarkStatus)
            {
                :
                    xpos = ();
                    ypos = ();
                    break;
                :
                    xpos = () - (watermark.Width / ));
                    ypos = ();
                    break;
                :
                    xpos = () - (watermark.Width));
                    ypos = ();
                    break;
                :
                    xpos = ();
                    ypos = () - (watermark.Height / ));
                    break;
                :
                    xpos = () - (watermark.Width / ));
                    ypos = () - (watermark.Height / ));
                    break;
                :
                    xpos = () - (watermark.Width));
                    ypos = () - (watermark.Height / ));
                    break;
                :
                    xpos = ();
                    ypos = () - watermark.Height);
                    break;
                :
                    xpos = () - (watermark.Width / ));
                    ypos = () - watermark.Height);
                    break;
                :
                    xpos = () - (watermark.Width));
                    ypos = () - watermark.Height);
                    break;
            }

            g.DrawImage(watermark, , , watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo codec in codecs)
            {
                )
                    ici = codec;
            }
            EncoderParameters encoderParams = new EncoderParameters();
            ];
             || quality > )
                quality = ;

            qualityParam[] = quality;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[] = 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);

            ;
            ;

            switch (watermarkStatus)
            {
                :
                    xpos = (;
                    ypos = (;
                    break;
                :
                    xpos = (() - (crSize.Width / );
                    ypos = (;
                    break;
                :
                    xpos = (() - crSize.Width;
                    ypos = (;
                    break;
                :
                    xpos = (;
                    ypos = (() - (crSize.Height / );
                    break;
                :
                    xpos = (() - (crSize.Width / );
                    ypos = (() - (crSize.Height / );
                    break;
                :
                    xpos = (() - crSize.Width;
                    ypos = (() - (crSize.Height / );
                    break;
                :
                    xpos = (;
                    ypos = (() - crSize.Height;
                    break;
                :
                    xpos = (() - (crSize.Width / );
                    ypos = (() - crSize.Height;
                    break;
                :
                    xpos = (() - crSize.Width;
                    ypos = (() - crSize.Height;
                    break;
            }

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

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo codec in codecs)
            {
                )
                    ici = codec;
            }
            EncoderParameters encoderParams = new EncoderParameters();
            ];
             || quality > )
                quality = ;

            qualityParam[] = quality;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[] = encoderParam;

            if (ici != null)
                img.Save(filename, ici, encoderParams);
            else
                img.Save(filename);

            g.Dispose();
            img.Dispose();
        }

最新文章

  1. ActiveMQ(li)
  2. django ftp 研究
  3. ASP.NET操作ORACLE数据库之模糊查询
  4. Linux设备驱动之中断支持及中断分层
  5. A session had already been started - ignoring session_start() 解决方法
  6. [IT学习]一些有用的工具
  7. Chrome常用快捷键
  8. __ATTRIBUTE__ 你知多少?【转】
  9. Hadoop与HBase中遇到的问题
  10. 小程序大智慧,sqlserver 注释提取工具
  11. react重学
  12. 吴恩达机器学习笔记60-大规模机器学习(Large Scale Machine Learning)
  13. Django缓存设置
  14. 7.6 C++基本序列式容器效率比较
  15. DevExpress DateEdit控件选择精确到秒
  16. 卷积神经网络之GoogleNet:inceptionV3模型学习
  17. 第二章&#160;向量(d4)有序向量:二分查找(改进)
  18. IEEEXtreme Practice Community Xtreme9.0 - Digit Fun!
  19. Git工程迁移方法总结(命令行) .(转载)
  20. UVA10212 【The Last Non-zero Digit.】

热门文章

  1. RecyclerView 刷新后自动滚动的问题,notifyDataSetChanged 后自己滚动
  2. pyqt5实现注册界面并获得文本框内容
  3. 前端笔记之Vue(一)初识SPA和Vue&amp;webpack配置和vue安装&amp;指令
  4. 响应式WEB设计的基本原则大总结
  5. 自学java难吗?一个JAVA学习者应该具备的素质
  6. 新手篇丨Python任意网段Web端口信息探测工具
  7. 使用vue开发项目需要注意的问题和可能踩到的坑
  8. NumPy 超详细教程(1):NumPy 数组
  9. 《k8s-1.13版本源码分析》-抢占调度
  10. hashCode()方法以及集合中Set的一些总结