- 注册时间
- 2011-5-26
- 最后登录
- 2013-9-17
- 在线时间
- 164 小时
- 阅读权限
- 100
- 积分
- 7890
- 帖子
- 992
- 精华
- 1
- UID
- 73
|
昨天给朋友写了个小工具,是用来给照片加水印的,(在此顺便鄙视一下我那个用相机无法设置照片加水印的朋友)
首先,我们定义三个变量,分别用来保存水印的颜色、字体、和日期格式- //颜色
- Color coF = Color.FromArgb(252, 91, 5);
- //字体
- Font fnT = new Font("Verdana", 32);
- //日期格式
- string DataFormat = "yyyy-MM-dd";
复制代码 好,下来就是最关键的加水印的方法了- private void AddFile()
- {
- try
- {
- //从this.textBox1.Text(路径)查找后缀为jpg的文件,搜索模式为当前目录和所有子目录
- string[] PhotoFile = Directory.GetFiles(this.textBox1.Text, "*.jpg", SearchOption.AllDirectories);
- //保存文件名
- string pName = "";
- //保存后缀,其实没必要,我只找了JPG,但是万一以后要找其他类型的图片呢?还是留着吧
- string extension = "";
- //本来这个地方我想用foreach的,但是想到下面用了委托,我要传递一个当前个数出去赋值给进度条,我又改为for了
- for (int a = 0; a < PhotoFile.Length; a++)
- {
- pName = Path.GetFileNameWithoutExtension(PhotoFile[a]);
- extension = Path.GetExtension(PhotoFile[a]);
-
- //从文件获取一个Image对象
- Image image = Image.FromFile(PhotoFile[a]);
- //从这个Image获取一个Graphics ,准备写字上去!
- Graphics g = Graphics.FromImage(image);
- // 写字上去之前,要准备好 字体、颜色、要写的文字、位置
- Font f = fnT;
- Brush b = new SolidBrush(Color.Red);
- // 注意这里的File.GetCreationTime方法,这个是获取文件的创建时间哦~
- string addText = File.GetCreationTime(PhotoFile[a]).ToString(DataFormat);
- //这个地方我觉得是整个程序最关键的地方了,
- //g.MeasureString方法计算了文字的size,也就是在这个字体、字号的前提条件下,要写的文字的分辨率
- //只有计算出了这个,才能把文字准确的“画”在图片上
- SizeF sizeF = g.MeasureString(addText, fnT);
- float width = sizeF.Width;
- float height = sizeF.Height;
- //这里计算下日期的分辨率是否比图片大,如果大了,就用默认的小字体写在左上角,否则,就写在右下角
- if (image.Width - width > 0 && image.Height - height > 0)
- {
- //g.DrawImage(image, image.Width - 250, image.Height - 80, image.Width, image.Height);
- g.DrawString(addText, f, b, image.Width - width, image.Height - height);
- }
- else
- {
- f = new Font("Verdana", 12);
- g.DrawImage(image, 0, 0, image.Width, image.Height);
- }
- //记得用完以后要释放!
- g.Dispose();
-
- //写好的图片要保持,要不然你写了干嘛?
- string newPath = this.textBox2.Text + "\\New_" + pName + extension;
- image.Save(newPath);
- image.Dispose();
-
- //在这里把工作状态传递出去,让人知道你现在工作干道哪了
- this.Invoke(new deNowInfo(NowInfo), a, PhotoFile.Length);
- }
- }
- catch (Exception ex)
- {
- this.Invoke(new deShowMessage(ShowMessage), ex.Message);
- }
- }
复制代码 在这里下载完整程序~
记得评分哈
照片加水印.rar
(393.46 KB, 下载次数: 1)
|
-
1
查看全部评分
-
|