GDI+Visual Studio .NET 2002.NET 1.0Visual Studio .NET 2003.NET 1.1Visual Studio 2005.NET 2.0Windows Forms中级开发Visual StudioWindows.NETC#
水印创建器






4.48/5 (16投票s)
2005年6月16日
3分钟阅读

115747

5241
一个在图片底部叠加水印和/或版权声明的工具。
引言
我想在我发布到互联网之前,给一些自己拍摄的日落照片加上水印。在搜索了一个小时左右之后,我没有找到任何免费软件工具。都是共享软件,意味着你必须购买,#$#$!@##!#@#@。我决定自己做一个工具,非常感谢CodeProject中Joel Neubeck的文章。使用他的文章,我只是尝试创建一个用户友好的GUI工具,用版权声明标记图像,也可以选择添加你的公司标志。
你可以把这个工具叫做水印创建器,水印工具或者任何名字。我把它命名为MarkMyImage。
上面的图片来自互联网,版权归各自的所有者所有。
使用代码
你可以下载源代码,并根据你的需要进行修改,虽然我觉得你不需要修改任何东西 :-)。
- 在运行应用程序之前,不要忘记运行 "MarkMyImage.reg"。这将在你的注册表中创建必要的键(用于存储用户偏好)。
Form_Load
从系统注册表中获取值并初始化屏幕。- 你现在应该将你的工作文件夹指向你的图片文件夹(输入文件夹),你的图片就位于那里。
- 你可以预览所有图像,并选择需要的图像(默认情况下,所有图像都会被选中)。
- 默认情况下,所有输出文件将以 "[文件名][后缀].ext" 的形式生成在同一文件夹中。默认情况下,后缀是 "_final"。
- 你可以设置一个不同的输出文件夹,这样输出文件名将保持不变。
Form_Closed
将所有当前设置保存到注册表中。
类 Watermark
有两个构造函数,有或没有水印图像。
WaterMark(string WorkingDirectory, string Copyright, Image ImgWatermark);
WaterMark(string WorkingDirectory, string Copyright);
根据用户的选择(水印图像偏好),我们将通过传递必要的参数来创建 WaterMark
对象...
if (chkWaterMarkImage.Checked == true)
wm = new WaterMark(txtWorkingFolder.Text,
txtCopyRight.Text,picWaterMark.Image);
else
wm = new WaterMark(txtWorkingFolder.Text,txtCopyRight.Text);
现在,一个简单的循环执行所有选定的文件。
for(int i=0;i<lstFileList.CheckedItems.Count;i++)
{
srcPic = txtWorkingFolder.Text +
lstFileList.Items[i].ToString().Substring(
lstFileList.Items[i].ToString().LastIndexOf("\\"));
if (chkSameOutputFolder.Checked == true)
dstPic = srcPic.Insert(srcPic.LastIndexOf("."),txtSuffix.Text);
else
dstPic = txtOutputFolder.Text + "\\" +
srcPic.Substring(srcPic.LastIndexOf("\\") + 1);
wm.MarkImage(srcPic,dstPic);
progressBar1.Increment(1);
statusBarPanel2.Text = "Proecessing Image " +
srcPic.Substring(lstFileList.Items[i].ToString().LastIndexOf("\\") + 1);
Application.DoEvents();
}
关注点
- 我真的很想在图像中放入爵士乐般的文字,类似于 MS® Word Art。现在,在对源代码进行一些修改后,这是非常有可能的。我将尝试修改源代码(希望我有时间),以便可以配置 "版权声明" 和 "标志" 的位置。
- 这个例子也展示了
PropertyGrid
控件的简单用法。 - 我发现了一个非常好的逻辑来设置
PropertyGrid
控件的默认值。 它使用了System.Reflection
的PropertyInfo
。 看看下面的代码块PropertyInfo[] props = this.GetType().GetProperties(); for (int i=0; i<props.Length; i++) { object[] attrs = props[i].GetCustomAttributes(typeof(DefaultValueAttribute),false); if (attrs.Length > 0) { DefaultValueAttribute attr = (DefaultValueAttribute)attrs[0]; props[i].SetValue(this,attr.Value,null); } }
- 获取所有属性
props
。 - 获取每个属性的自定义属性
attrs
。 - 获取
DefaultValueAttribute
。 - 设置属性值。
历史
- 2005年6月21日,1.0 - 发布 MarkMyImage 提示。
- 没有经过适当的测试,如果您遇到任何错误/漏洞,请告诉我。
- 版权声明/水印声明和水印标志的位置是可配置的。
- 缺点1,目前该工具仅支持 JPEG (*.jpg, *.jpeg) 和位图 (*.bmp) 图像。
- 2005年6月15日,首次发布 MarkMyImage。
- 缺点1,版权声明/水印声明和水印标志的位置是硬编码的,因此不可配置。
- 缺点2,目前该工具仅支持 JPEG (*.jpg, *.jpeg) 和位图 (*.bmp) 图像。