成都创新互联网站制作重庆分公司

关于C#对图片部分操作(水印、透明度)-创新互联

///

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、泰顺网站维护、网站推广。

      /// 处理水印图片的水印

      ///

      /// 带有水印的图片路径

      /// 返回处理好水印的图片

      private Image OperationPhoto(string path)

      {

          Image p_w_picpath = null;

          XMLCollectPhotoSet xMLCollectPhotoSet = new XMLCollectPhotoSet();

          CollectPhotoSetInfo collectPhotoSetInfo = new CollectPhotoSetInfo();

          collectPhotoSetInfo = xMLCollectPhotoSet.Get();

          string pathNew=collectPhotoSetInfo.ConverPhoto;

          if (collectPhotoSetInfo.CutWater == "yes")

          {

              //截取水印

              p_w_picpath=CutWater(path);

          }

          else if (collectPhotoSetInfo.CutWater == "no")

          {

              //图片覆盖水印

              if (collectPhotoSetInfo.ConverWater == "yes")

              {

                  Image p_w_picpath2 = Image.FromFile(path);

                  Image p_w_picpathNew = Image.FromFile(collectPhotoSetInfo.ConverPhoto);

                  p_w_picpath = ConverWater(p_w_picpath2, p_w_picpathNew);

                  //p_w_picpath2.Dispose();

                  //p_w_picpathNew.Dispose();

              }

              else if (collectPhotoSetInfo.ConverWater == "no")

              {

                  Image p_w_picpath2 = Image.FromFile(path);

                  p_w_picpath = p_w_picpath2;

              }

          }

          //图片覆盖水印和添加图片水印没有任何关系 既可以同时存在也可以分开存在

          if (collectPhotoSetInfo.UsingD == "yes")

          {

              //处理p_w_picpath图片

              if (p_w_picpath == null)

              {

                  Image p_w_picpath2 = Image.FromFile(path);

                  p_w_picpath = p_w_picpath2;

              }

              Image p_w_picpathWater = p_w_picpath;

              string rMarkImgPath=collectPhotoSetInfo.WaterPhoto;//水印图片

              string textStr = collectPhotoSetInfo.WaterText;//水印文字

              Font f = new Font(collectPhotoSetInfo.FontFamily, collectPhotoSetInfo.FontSize);

              Brush b = new SolidBrush(collectPhotoSetInfo.FontColor);

              float opacity = collectPhotoSetInfo.Opacity;

              p_w_picpath = BulidWatermarkPhoto(p_w_picpath, rMarkImgPath, opacity, textStr, f, b);//iamge被操作的图片rMarkImgPath水印图片0.6f透明度textStr文字f字体b字体颜色

          }

          return p_w_picpath;

      }

      ///

      /// 去掉水印

      ///

      /// 带有水印的图片

      /// 去掉水印后的图片

      private Image CutWater(string path)

      {

          Bitmap sourceBitmap = new Bitmap(path);

          int width = sourceBitmap.Width;

          int height = sourceBitmap.Height;

          Bitmap resultBitmap = new Bitmap(width, height);

          using (Graphics g = Graphics.FromImage(resultBitmap))

          {

              Rectangle resultRectangle = new Rectangle(0, 0, width, height);

              Rectangle sourceRectangle = new Rectangle(0 + 1, 0 + 1,width-200, height);

              g.DrawImage(sourceBitmap, resultRectangle, sourceRectangle, GraphicsUnit.Pixel);

          }

          return resultBitmap;

      }

      ///

      /// 用图片覆盖水印

      ///

      /// 水印图片

      /// 覆盖图片

      /// 覆盖掉水印的图片

      private Image ConverWater(Image p_w_picpath, Image p_w_picpathNew)

      {

          try

          {

              int width = p_w_picpath.Width;

              int height = p_w_picpath.Height;

              Graphics g = Graphics.FromImage(p_w_picpath);

              g.DrawImage(p_w_picpathNew, new Rectangle(width - 230, height - 180, 250, 180), 0, 0, p_w_picpath.Width, p_w_picpath.Height, GraphicsUnit.Pixel);

              g.Dispose();

           

          }

          catch(Exception ex)

          {

          }

          return p_w_picpath;

      }

      ///

      /// 制作水印图片(文字、图片或者文字和图片)

      ///

      /// 原始图片

      /// 所需水印图片

      /// 透明度

      /// /// 文字

      /// 字体

      /// 刷子

      public Image BulidWatermarkPhoto(Image picImage, string rMarkImgPath, float opacityvalue, string textStr, Font font, Brush brush)

      {

          Dictionary dicPaths = new Dictionary();

          //解析水印图片的路径

          if (rMarkImgPath != null && rMarkImgPath.Length > 0)

          {

              string[] paths = rMarkImgPath.Split(';');

              for (int i = 0; i < paths.Length; i++)

              {

                  string path = paths[i].Split(',')[0];

                  string name = paths[i].Split(',')[1];

                  dicPaths.Add(name, path);

              }

          }

          Dictionary dicTexts = new Dictionary();

          //解析文字

          if (textStr != null && textStr.Length > 0)

          {

              string[] texts=textStr.Split(';');

              for (int i = 0; i < texts.Length; i++)

              {

                  string text = texts[i].Split(',')[0];

                  string name = texts[i].Split(',')[1];

                  dicTexts.Add(name, text);

              }

          }

          Image p_w_picpath = picImage;

          Dictionary keyValue = DataCache.keyValue;

          foreach (string key in keyValue.Keys)

          {

              Graphics g = Graphics.FromImage(p_w_picpath);

              int x = Convert.ToInt32(keyValue[key].Split(',')[0]);

              int y = Convert.ToInt32(keyValue[key].Split(',')[1]);

              if (dicPaths != null && dicPaths.Count > 0)//判断是否有水印图片

              {

                  Image copyImage = Image.FromFile(dicPaths[key]);//水印图片路径

                  copyImage = ChangeOpacity(copyImage, opacityvalue);//经过处理透明化的图片

                  g.DrawImage(copyImage, new Rectangle(x, y, 200, 200), 0, 0, p_w_picpath.Width, p_w_picpath.Height, GraphicsUnit.Pixel);//画上水印图片

              }

              if (dicTexts != null && dicTexts.Count > 0) //判断是否有水印字

              {

                  Image txtImage = textImage(dicTexts[key], font, brush);//文字

                  txtImage = ChangeOpacity(txtImage, opacityvalue);

                  g.DrawImage(txtImage, new Rectangle(x, y, 200, 200), 50, 50, p_w_picpath.Width, p_w_picpath.Height, GraphicsUnit.Pixel);//画上水印文字

              }

              g.Dispose();

          }

          return p_w_picpath;

      }

      ///

      /// 改变图片的透明度

      ///

      /// 图片

      /// 透明度

      ///

      public static Bitmap ChangeOpacity(Image img, float opacityvalue)

      {

          float[][] nArray ={ new float[] {1, 0, 0, 0, 0},

                              new float[] {0, 1, 0, 0, 0},

                              new float[] {0, 0, 1, 0, 0},

                              new float[] {0, 0, 0, opacityvalue, 0},

                              new float[] {0, 0, 0, 0, 1}};

          ColorMatrix matrix = new ColorMatrix(nArray);

          ImageAttributes attributes = new ImageAttributes();

          attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

          Image srcImage = img;

          Bitmap resultImage = new Bitmap(srcImage.Width, srcImage.Height);

          Graphics g = Graphics.FromImage(resultImage);

          g.DrawImage(srcImage, new Rectangle(0, 0, srcImage.Width, srcImage.Height), 0, 0, srcImage.Width, srcImage.Height, GraphicsUnit.Pixel, attributes);

          return resultImage;

      }

      ///

      /// 制作一个带有文字的透明图

      ///

      /// 文字

      /// 文字样式

      /// 刷子

      /// 带有文字的透明图

      private Image textImage(string textStr, Font font, Brush brush)

      {

          string path = Application.StartupPath+@"\collectionPhoto.jpg";

          Image p_w_picpath = Image.FromFile(path);

          p_w_picpath = ChangeOpacity(p_w_picpath, 0.0f);

          Graphics g = Graphics.FromImage(p_w_picpath);

          g.DrawString(textStr, font, brush, 60, 60);

          g.Dispose();

          Image p_w_picpathNew = p_w_picpath;

          return p_w_picpathNew;

      }

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文名称:关于C#对图片部分操作(水印、透明度)-创新互联
文章位置:http://cxhlcq.com/article/ddicgi.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部