文字水印添加


一步一步生成图片水印

     水印,就是指在原图片上添加一些自己的东西,比如自己网站的logo或者签名之类的,这样别人转载的时候就会带上自己版权的信息,这对于网络中防盗链非常有效。即使是别人把你的图片转走了,也会带上专属于你的信息,通俗一点就是类似于你为这个图片盖了一个章。

      给图片添加水印常用的有图片水印和文字水印,网上也有很多生成水印的工具,但是作为一个屌丝,不管好与不好,是不是用自己手写的工具会更爽呢?本文仅仅是提供了一种实现的方法,肯定还有其他好的方法,欢迎大家来一起交流。

      由于楼主是一个务实的人,不喜欢整太多虚无缥缈的,所以程序的界面都是原生态的哈,呵呵,有需要的童鞋可以自己去添加样式改造。好了,不多说,先上图看一下效果。

      图1为原图,图2-图6为添加水印之后的图片。

       

                            图-1  原图                                            图-2 左上角加水印                                                       图-2 右上角加水印

       

                     图-3 左下角加水印                                           图-3 中间加水印                                                       图-3 右下角加水印

      整个程序的结构跟之前的那篇文章快速生成缩略图的结构一样,一个简单的前台显示界面,一个Handler。前台将图片的原图路径和保存路径传到后台,然后通过Handler去处理,虽然代码很简单,但是分工还是很明确,各司其责,互不干扰。对水印的位置,通过如下的枚举来控制:      

复制代码
 public enum WaterPositionMode
    {
        LeftTop,
        LeftBottom,
        RightTop,
        RightBottom,
        Center
    }
复制代码
View Code  

        前台页面:

         

         Handler中通过一个方法来处理生成图片的水印。主要代码:

复制代码
 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();
            }
            
        }
复制代码
View Code

 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值