65.9K
CodeProject 正在变化。 阅读更多。
Home

水印创建器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.48/5 (16投票s)

2005年6月16日

3分钟阅读

viewsIcon

115747

downloadIcon

5241

一个在图片底部叠加水印和/或版权声明的工具。

Mark my Image Tool....

引言

我想在我发布到互联网之前,给一些自己拍摄的日落照片加上水印。在搜索了一个小时左右之后,我没有找到任何免费软件工具。都是共享软件,意味着你必须购买,#$#$!@##!#@#@。我决定自己做一个工具,非常感谢CodeProject中Joel Neubeck的文章。使用他的文章,我只是尝试创建一个用户友好的GUI工具,用版权声明标记图像,也可以选择添加你的公司标志。

你可以把这个工具叫做水印创建器,水印工具或者任何名字。我把它命名为MarkMyImage。

Sample watermarked image

上面的图片来自互联网,版权归各自的所有者所有。

使用代码

你可以下载源代码,并根据你的需要进行修改,虽然我觉得你不需要修改任何东西 :-)。

  • 在运行应用程序之前,不要忘记运行 "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.ReflectionPropertyInfo。 看看下面的代码块
    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) 图像。
© . All rights reserved.