C#向图片添加水印的两种不同场景与解决方法

场景一

也就是大家经常用的,一般是图片的4个角落,基于横纵坐标来添加。

效果如下:

添加水印方法

static void addWatermarkText(Graphics picture,int fontsize, string _watermarkText, string _watermarkPosition, int _width, int _height)
  {
   int[] sizes = new int[] {32, 14, 12, 10, 8, 6, 4 };
   Font crFont = null;
   SizeF crSize = new SizeF();

   crFont = new Font("微软雅黑", fontsize, FontStyle.Bold);
   crSize = picture.MeasureString(_watermarkText, crFont);

   float xpos = 0;
   float ypos = 0;
   Color color =Color.Firebrick;

   switch (_watermarkPosition)
   {
    case "WM_TOP_LEFT":
     xpos = ((float)_width * (float).01) + (crSize.Width / 2);
     ypos = (float)_height * (float).01;
     break;
    case "WM_TOP_RIGHT":
     xpos = ((float)_width * (float).99) - (crSize.Width / 2);
     ypos = (float)_height * (float).01;
     break;
    case "WM_BOTTOM_RIGHT":
     xpos = ((float)_width * (float).99) - (crSize.Width / 2);
     ypos = ((float)_height * (float).99) - crSize.Height;
     break;
    case "WM_BOTTOM_LEFT":
     xpos = ((float)_width * (float).01) + (crSize.Width / 2);
     ypos = ((float)_height * (float).99) - crSize.Height;
     break;

   }

   StringFormat StrFormat = new StringFormat();
   StrFormat.Alignment = StringAlignment.Center;
   SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));//加阴影
   picture.DrawString(_watermarkText, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat);

   SolidBrush semiTransBrush = new SolidBrush(color); //添加水印
   picture.DrawString(_watermarkText, crFont, semiTransBrush, xpos, ypos, StrFormat);

   semiTransBrush2.Dispose();
   semiTransBrush.Dispose();
  }

场景二

在图片内基于固定位置,文字始终居中。刚开始我基于第一种场景来根据水印汉字的长度来计算坐标,后来发现方法始终不可靠。现在是先在图片固定区域(水印区域)画一个矩形,然后再矩形内添加水印汉字,并使用画刷保持文字居中。

效果图如下

添加水印的方法

static void addWatermarkText(Graphics picture,string type, int fontsize, string _watermarkText)
  {
   //1、先画矩形
   RectangleF drawRect;
   Color color;
   if (type == "Top")
   {
     drawRect = new RectangleF(73, 135, 450, 64);
     color = Color.FromArgb(255, 255, 255);
   }
   else
   {
     drawRect = new RectangleF(194, 245, 250, 39);
     color = Color.FromArgb(244, 226, 38);
   }

   //2、在基于矩形画水印文字
   Font crFont = null;

   StringFormat StrFormat = new StringFormat();
   StrFormat.Alignment = StringAlignment.Center;

   crFont = new Font("微软雅黑", fontsize, FontStyle.Bold);
   SolidBrush semiTransBrush = new SolidBrush(color); //添加水印
   picture.DrawString(_watermarkText, crFont, semiTransBrush, drawRect, StrFormat);

   semiTransBrush.Dispose();
  }

总结

和第一种方法比起来,第二种方法更直观,更短小精悍,只需要在你需要添加水印的图片上计算好固定坐标然后先画一个矩形,然后把水印汉字画在矩形内,这样不管水印汉字如何变化都可以在图片固定位置居中。以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助。

(0)

相关推荐

  • C#图片添加水印的实现代码

    本文实例介绍了C#图片添加水印的实现方法,可以为图片加文字水印,及判断是否是图片文件,分享给大家供大家参考,具体内容如下 效果图: 以下是HovercWarter类的代码: using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace HoverTreeBatch.HovercFrame { public class HovercWarter { public static Image AddText

  • .net c# gif动画如何添加图片水印实现思路及代码

    复制代码 代码如下: public static Bitmap WaterMarkWithText(System.Drawing.Bitmap origialGif, string text,string filePath) { //用于存放桢 List<Frame> frames = new List<Frame>(); //如果不是gif文件,直接返回原图像 if (origialGif.RawFormat.Guid != System.Drawing.Imaging.Imag

  • C#给图片加水印的简单实现方法

    本文实例讲述了C#给图片加水印的简单实现方法.分享给大家供大家参考.具体分析如下: 这里实现本网站图片保护功能类: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing;//image的命名空间 namespace 实现本网站图片保护功能 { public class yanzhengma:IHttpHandler { public boo

  • C#监控文件夹并自动给图片文件打水印的方法

    本文实例讲述了C#监控文件夹并自动给图片文件打水印的方法.分享给大家供大家参考.具体分析如下: 个人私心的缘故,经常写一些博客之类的文章,由于看到网络上面好多同志转载后不标明出处,所以特地写了这么一个小程序,这个小程序的功能是当我在页面上通过QQ截图之后,把截到的图片保存到一个指定的路径,然后工具自动帮我把图片上面加上水印. 下面是全部代码: using System; using System.Collections.Generic; using System.ComponentModel;

  • C# 给站点指定位置的某种格式的图片添加水印

    复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; usi

  • C#(.net)水印图片的生成完整实例

    本文以一个完整实例讲述了C#水印图片的生成方法.是非常实用的技巧.分享给大家供大家参考. 具体实例代码如下: /* * * 使用说明: * 建议先定义一个WaterImage实例 * 然后利用实例的属性,去匹配需要进行操作的参数 * 然后定义一个WaterImageManage实例 * 利用WaterImageManage实例进行DrawImage(),印图片水印 * DrawWords()印文字水印 * */ using System; using System.Drawing; using

  • C# 添加图片水印类实现代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.Drawing.Imaging; using System.Web; using System.Drawing.Drawing2D; using System.Reflection; namespace Chen { public clas

  • C#实现给图片加水印的方法

    本文实例讲述了C#实现给图片加水印的方法.分享给大家供大家参考,具体如下: using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; namespace Tutorial { class WaterMark { [STAThread] static void Main(string[] args) { //set a working directory str

  • C#给图片添加水印完整实例

    本文实例讲述了C#给图片添加水印的方法.分享给大家供大家参考,具体如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Syste

  • c#图片添加水印的实例代码

    复制代码 代码如下: using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.IO;namespace ImageDrawing{ /// <summary> /// 图片修改类,主要是用来保护图片版权的 /// </summary> public class ImageModification {  #region &quo

随机推荐