设为首页收藏本站

Scripts 学盟

 找回密码
 加入学盟

QQ登录

只需一步,快速开始

查看: 1687|回复: 1
打印 上一主题 下一主题

C# 给照片加水印 [复制链接]

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
1#
俊俊 实名认证  发表于 2011-8-19 10:05:45 |只看该作者 |倒序浏览
昨天给朋友写了个小工具,是用来给照片加水印的,(在此顺便鄙视一下我那个用相机无法设置照片加水印的朋友)

首先,我们定义三个变量,分别用来保存水印的颜色、字体、和日期格式
  1. //颜色
  2. Color coF = Color.FromArgb(252, 91, 5);
  3. //字体
  4. Font fnT = new Font("Verdana", 32);
  5. //日期格式
  6. string DataFormat = "yyyy-MM-dd";
复制代码
好,下来就是最关键的加水印的方法了
  1. private void AddFile()
  2.         {
  3.             try
  4.             {
  5.                 //从this.textBox1.Text(路径)查找后缀为jpg的文件,搜索模式为当前目录和所有子目录
  6.                 string[] PhotoFile = Directory.GetFiles(this.textBox1.Text, "*.jpg", SearchOption.AllDirectories);

  7.                 //保存文件名
  8.                 string pName = "";
  9.                //保存后缀,其实没必要,我只找了JPG,但是万一以后要找其他类型的图片呢?还是留着吧
  10.                 string extension = "";

  11.                 //本来这个地方我想用foreach的,但是想到下面用了委托,我要传递一个当前个数出去赋值给进度条,我又改为for了
  12.                 for (int a = 0; a < PhotoFile.Length; a++)
  13.                 {
  14.                     pName = Path.GetFileNameWithoutExtension(PhotoFile[a]);
  15.                     extension = Path.GetExtension(PhotoFile[a]);
  16.                     
  17.                     //从文件获取一个Image对象
  18.                     Image image = Image.FromFile(PhotoFile[a]);
  19.                     //从这个Image获取一个Graphics ,准备写字上去!
  20.                     Graphics g = Graphics.FromImage(image);

  21.                     // 写字上去之前,要准备好 字体、颜色、要写的文字、位置
  22.                     Font f = fnT;
  23.                     Brush b = new SolidBrush(Color.Red);
  24.                     // 注意这里的File.GetCreationTime方法,这个是获取文件的创建时间哦~
  25.                     string addText = File.GetCreationTime(PhotoFile[a]).ToString(DataFormat);

  26.                     //这个地方我觉得是整个程序最关键的地方了,
  27.                     //g.MeasureString方法计算了文字的size,也就是在这个字体、字号的前提条件下,要写的文字的分辨率
  28.                     //只有计算出了这个,才能把文字准确的“画”在图片上
  29.                     SizeF sizeF = g.MeasureString(addText, fnT);
  30.                     float width = sizeF.Width;
  31.                     float height = sizeF.Height;

  32.                     //这里计算下日期的分辨率是否比图片大,如果大了,就用默认的小字体写在左上角,否则,就写在右下角
  33.                     if (image.Width - width > 0 && image.Height - height > 0)
  34.                     {
  35.                         //g.DrawImage(image, image.Width - 250, image.Height - 80, image.Width, image.Height);
  36.                         g.DrawString(addText, f, b, image.Width - width, image.Height - height);
  37.                     }
  38.                     else
  39.                     {
  40.                         f = new Font("Verdana", 12);
  41.                         g.DrawImage(image, 0, 0, image.Width, image.Height);
  42.                     }

  43.                     //记得用完以后要释放!
  44.                     g.Dispose();
  45.                     
  46.                     //写好的图片要保持,要不然你写了干嘛?
  47.                     string newPath = this.textBox2.Text + "\\New_" + pName + extension;
  48.                     image.Save(newPath);
  49.                     image.Dispose();
  50.                     
  51.                     //在这里把工作状态传递出去,让人知道你现在工作干道哪了
  52.                     this.Invoke(new deNowInfo(NowInfo), a, PhotoFile.Length);
  53.                 }
  54.             }
  55.             catch (Exception ex)
  56.             {
  57.                 this.Invoke(new deShowMessage(ShowMessage), ex.Message);
  58.             }
  59.         }
复制代码
在这里下载完整程序~
记得评分哈
照片加水印.rar (393.46 KB, 下载次数: 1)

1

查看全部评分

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0

管理员

超级大菜鸟

Rank: 9Rank: 9Rank: 9

2#
混混@普宁.中国 实名认证  发表于 2011-8-19 11:15:36 |只看该作者
好,加分!

以前写 asp 还要搞什么 水印组件,麻烦

使用道具 举报

您需要登录后才可以回帖 登录 | 加入学盟

手机版|Scripts 学盟   |

GMT+8, 2024-5-7 12:15 , Processed in 1.085309 second(s), 15 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部