http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 26908|回复: 13

[C#语言基础] C#生成水印图片,给图片添加水印

[复制链接]
发表于 2014-1-26 08:44:28 | 显示全部楼层 |阅读模式
水印,就是指在原图片上添加一些自己的东西,比如自己网站的logo或者签名之类的,这样别人转载的时候就会带上自己版权的信息,这对于网络中防盗链非常有效。即使是别人把你的图片转走了,也会带上专属于你的信息,通俗一点就是类似于你为这个图片盖了一个章。
      给图片添加水印常用的有图片水印和文字水印,网上也有很多生成水印的工具,但是作为一个屌丝,不管好与不好,是不是用自己手写的工具会更爽呢?本文仅仅是提供了一种实现的方法,肯定还有其他好的方法,欢迎大家来一起交流。
      由于楼主是一个务实的人,不喜欢整太多虚无缥缈的,所以程序的界面都是原生态的哈,呵呵,有需要的童鞋可以自己去添加样式改造。好了,不多说,先上图看一下效果。
      图1为原图,图2-图6为添加水印之后的图片。                     
图-1  原图         
252347104704552.jpg                      
图-2 左上角加水印      
252348119239977.jpg                                                 
图-2 右上角加水印
252348321266005.jpg

图-3 左下角加水印   
1.jpg                                  
图-3 中间加水印      
2.jpg                                                
图-3 右下角加水印
3.jpg
      整个程序的结构跟之前的那篇文章快速生成缩略图的结构一样,一个简单的前台显示界面,一个Handler。前台将图片的原图路径和保存路径传到后台,然后通过Handler去处理,虽然代码很简单,但是分工还是很明确,各司其责,互不干扰。对水印的位置,通过如下的枚举来控制:      
[C#] 纯文本查看 复制代码
public enum WaterPositionMode
    {
        LeftTop,
        LeftBottom,
        RightTop,
        RightBottom,
        Center
    }
前台页面:
260018152354223.jpg
  Handler中通过一个方法来处理生成图片的水印。主要代码:
[C#] 纯文本查看 复制代码
public static void AddWaterText(string oldpath,string savepath,string watertext,WaterPositionMode position,string color,int alpha)
        {
            Image image = Image.FromFile(oldpath);
            Bitmap bitmap=new Bitmap(image.Width,image.Height);
            Graphics graphics = Graphics.FromImage(bitmap);
            graphics.Clear(Color.White);
            graphics.DrawImage(image,new Rectangle(0,0,image.Width,image.Height),0,0,image.Width,image.Height,GraphicsUnit.Pixel);
            Font font=new Font("arial",18);
            SizeF ziSizeF=new SizeF();
            ziSizeF = graphics.MeasureString(watertext, font);
            float x = 0f;
            float y = 0f;
            switch (position)
            {
                case  WaterPositionMode.LeftTop:
                    x = ziSizeF.Width/2f;
                    y = 8f;
                    break;
                case WaterPositionMode.LeftBottom:
                    x = ziSizeF.Width/2f;
                    y = image.Height - ziSizeF.Height;
                    break;
                case WaterPositionMode.RightTop:
                    x = image.Width*1f - ziSizeF.Width/2f;
                    y = 8f;
                    break;
                case WaterPositionMode.RightBottom:
                    x = image.Width - ziSizeF.Width;
                    y = image.Height - ziSizeF.Height;
                    break;
                case WaterPositionMode.Center:
                    x = image.Width/2;
                    y = image.Height/2 - ziSizeF.Height/2;
                    break;
            }
            try
            {
                StringFormat stringFormat = new StringFormat {Alignment = StringAlignment.Center};
                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(alpha, 0, 0, 0));
                graphics.DrawString(watertext, font, solidBrush, x + 1f, y + 1f, stringFormat);
                SolidBrush brush = new SolidBrush(Color.FromArgb(alpha, ColorTranslator.FromHtml(color)));
                graphics.DrawString(watertext, font, brush, x, y, stringFormat);
                solidBrush.Dispose();
                brush.Dispose();
                bitmap.Save(savepath, ImageFormat.Jpeg);
            }
            catch (Exception e)
            {


            }
            finally
            {
                bitmap.Dispose();
                image.Dispose();
            }
            
        }
这样就能完美的生成水印图片了哦。当然了,由于只是做一个小的Demo,所以也没有循环的给文件夹下的所有图片去添加水印了,
需要的同学可以自己试试哈。由于时间的关系,水印的另一种方式图片水印今天就不写了,下次再和大家分享。
         希望能够给需要的朋友一点帮助,您的支持,我最大的动力,谢谢!

苏飞总结:这个方法总体来说还是可以的,
不过要实际使用的话还需要改一下代码,这个大家可以参考一下。
有什么问题可以发上来咱们讨论下


本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-1-26 11:04:07 | 显示全部楼层
先抢个2楼,支持站长!!
发表于 2014-2-2 02:16:25 | 显示全部楼层
加油,我们都看好你哦。
发表于 2014-5-20 12:22:19 | 显示全部楼层
谢谢站长的无私分享哦,我之前也曾经试过用一些第三方Imaging Plugin来帮助生成水印图片。 但是请问有没有去除图片水印的方法呢?
发表于 2014-10-16 14:42:26 | 显示全部楼层
能不能把这个实例发给我呀。我刚进公司,测试题就是这个。。。上传图片还要带水印,我能上传,但是不会弄水印。。。跪求!
发表于 2014-10-16 20:06:55 | 显示全部楼层
123abcd321 发表于 2014-10-16 14:42
能不能把这个实例发给我呀。我刚进公司,测试题就是这个。。。上传图片还要带水印,我能上传,但是不会弄水 ...

上面的几乎就是实例啊,你还要什么?
自己动手,丰衣足食嘛!
发表于 2014-10-16 20:08:02 | 显示全部楼层
强烈支持楼主ing……
发表于 2014-10-16 23:13:21 | 显示全部楼层
受教了学习中……
发表于 2014-10-17 09:25:13 | 显示全部楼层
表示以前从来没写过,所以没有注释看都看不懂。。。
发表于 2014-10-17 09:27:43 | 显示全部楼层
cload 发表于 2014-10-16 20:06
上面的几乎就是实例啊,你还要什么?
自己动手,丰衣足食嘛!

表示以前从来没写过,没有注释看都看不懂,看不懂你让我从何下手我想着给我一个实例,然后我慢慢看执行过程就知道了
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-24 10:43

© 2014-2021

快速回复 返回顶部 返回列表