C# 图片水印类

using  System;
using  System.Drawing;
using  System.Drawing.Imaging;
using  System.Drawing.Drawing2D;

public   class  ImageWaterMark
    {
        
///   <summary>
        
///  图片水印
        
///   </summary>
        
///   <param name="img"> 图片 </param>
        
///   <param name="filename"> 保存文件名 </param>
        
///   <param name="watermarkFilename"> 水印文件名 </param>
        
///   <param name="watermarkStatus"> 图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下 </param>
        
///   <param name="quality"> 附加水印图片质量,0-100 </param>
        
///   <param name="watermarkTransparency"> 水印的透明度 1--10 10为不透明 </param>
         public   static   void  AddImageSignPic(Image img,  string  filename,  string  watermarkFilename,  int  watermarkStatus,  int  quality,  int  watermarkTransparency)
        {
            Graphics g 
=  Graphics.FromImage(img);
            
// 设置高质量插值法
            g.InterpolationMode  =  System.Drawing.Drawing2D.InterpolationMode.High;
            
// 设置高质量,低速度呈现平滑程度
            g.SmoothingMode  =  System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            Image watermark 
=   new  Bitmap(watermarkFilename);
            
if  (watermark.Height  >=  img.Height  ||  watermark.Width  >=  img.Width)
            {
                
return ;
            }
            ImageAttributes imageAttributes 
=   new  ImageAttributes();
            ColorMap colorMap 
=   new  ColorMap();
            colorMap.OldColor 
=  Color.FromArgb( 255 0 255 0 );
            colorMap.NewColor 
=  Color.FromArgb( 0 0 0 0 );
            ColorMap[] remapTable 
=  { colorMap };
            imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
            
float  transparency  =   0.5F ;
            
if  (watermarkTransparency  >=   1   &&  watermarkTransparency  <=   10 )
            {
                transparency 
=  (watermarkTransparency  /   10.0F );
            }
            
float [][] colorMatrixElements  =  {
                                                
new   float [] { 1.0f ,   0.0f ,   0.0f ,   0.0f 0.0f },
                                                
new   float [] { 0.0f ,   1.0f ,   0.0f ,   0.0f 0.0f },
                                                
new   float [] { 0.0f ,   0.0f ,   1.0f ,   0.0f 0.0f },
                                                
new   float [] { 0.0f ,   0.0f ,   0.0f ,  transparency,  0.0f },
                                                
new   float [] { 0.0f ,   0.0f ,   0.0f ,   0.0f 1.0f }
                                            };
            ColorMatrix colorMatrix 
=   new  ColorMatrix(colorMatrixElements);
            imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
            
int  xpos  =   0 ;
            
int  ypos  =   0 ;
            
switch  (watermarkStatus)
            {
                
case   1 :
                    xpos 
=  ( int )(img.Width  *  ( float ). 01 );
                    ypos 
=  ( int )(img.Height  *  ( float ). 01 );
                    
break ;
                
case   2 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 50 -  (watermark.Width  /   2 ));
                    ypos 
=  ( int )(img.Height  *  ( float ). 01 );
                    
break ;
                
case   3 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 99 -  (watermark.Width));
                    ypos 
=  ( int )(img.Height  *  ( float ). 01 );
                    
break ;
                
case   4 :
                    xpos 
=  ( int )(img.Width  *  ( float ). 01 );
                    ypos 
=  ( int )((img.Height  *  ( float ). 50 -  (watermark.Height  /   2 ));
                    
break ;
                
case   5 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 50 -  (watermark.Width  /   2 ));
                    ypos 
=  ( int )((img.Height  *  ( float ). 50 -  (watermark.Height  /   2 ));
                    
break ;
                
case   6 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 99 -  (watermark.Width));
                    ypos 
=  ( int )((img.Height  *  ( float ). 50 -  (watermark.Height  /   2 ));
                    
break ;
                
case   7 :
                    xpos 
=  ( int )(img.Width  *  ( float ). 01 );
                    ypos 
=  ( int )((img.Height  *  ( float ). 99 -  watermark.Height);
                    
break ;
                
case   8 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 50 -  (watermark.Width  /   2 ));
                    ypos 
=  ( int )((img.Height  *  ( float ). 99 -  watermark.Height);
                    
break ;
                
case   9 :
                    xpos 
=  ( int )((img.Width  *  ( float ). 99 -  (watermark.Width));
                    ypos 
=  ( int )((img.Height  *  ( float ). 99 -  watermark.Height);
                    
break ;
            }
            g.DrawImage(watermark, 
new  Rectangle(xpos, ypos, watermark.Width, watermark.Height),  0 0 , watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);
            
// g.DrawImage(watermark, new System.Drawing.Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, System.Drawing.GraphicsUnit.Pixel);
            ImageCodecInfo[] codecs  =  ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici 
=   null ;
            
foreach  (ImageCodecInfo codec  in  codecs)
            {
                
if  (codec.MimeType.IndexOf( " jpeg " >   - 1 )
                {
                    ici 
=  codec;
                }
            }
            EncoderParameters encoderParams 
=   new  EncoderParameters();
            
long [] qualityParam  =   new   long [ 1 ];
            
if  (quality  <   0   ||  quality  >   100 )
            {
                quality 
=   80 ;
            }
            qualityParam[
0 =  quality;
            EncoderParameter encoderParam 
=   new  EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[
0 =  encoderParam;
            
if  (ici  !=   null )
            {
                img.Save(filename, ici, encoderParams);
            }
            
else
            {
                img.Save(filename);
            }
            g.Dispose();
            img.Dispose();
            watermark.Dispose();
            imageAttributes.Dispose();
        }

        
///   <summary>
        
///  文字水印
        
///   </summary>
        
///   <param name="img"> 图片 </param>
        
///   <param name="filename"> 保存文件名 </param>
        
///   <param name="watermarkText"> 水印文字 </param>
        
///   <param name="watermarkStatus"> 图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下 </param>
        
///   <param name="quality"> 附加水印图片质量,0-100 </param>
        
///   <param name="fontname"> 字体 </param>
        
///   <param name="fontsize"> 字体大小 </param>
         public   static   void  AddImageSignText(Image img,  string  filename,  string  watermarkText,  int  watermarkStatus,  int  quality,  string  fontname,  int  fontsize)
        {
            Graphics g 
=  Graphics.FromImage(img);
            Font drawFont 
=   new  Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
            SizeF crSize;
            crSize 
=  g.MeasureString(watermarkText, drawFont);
            
float  xpos  =   0 ;
            
float  ypos  =   0 ;
            
switch  (watermarkStatus)
            {
                
case   1 :
                    xpos 
=  ( float )img.Width  *  ( float ). 01 ;
                    ypos 
=  ( float )img.Height  *  ( float ). 01 ;
                    
break ;
                
case   2 :
                    xpos 
=  (( float )img.Width  *  ( float ). 50 -  (crSize.Width  /   2 );
                    ypos 
=  ( float )img.Height  *  ( float ). 01 ;
                    
break ;
                
case   3 :
                    xpos 
=  (( float )img.Width  *  ( float ). 99 -  crSize.Width;
                    ypos 
=  ( float )img.Height  *  ( float ). 01 ;
                    
break ;
                
case   4 :
                    xpos 
=  ( float )img.Width  *  ( float ). 01 ;
                    ypos 
=  (( float )img.Height  *  ( float ). 50 -  (crSize.Height  /   2 );
                    
break ;
                
case   5 :
                    xpos 
=  (( float )img.Width  *  ( float ). 50 -  (crSize.Width  /   2 );
                    ypos 
=  (( float )img.Height  *  ( float ). 50 -  (crSize.Height  /   2 );
                    
break ;
                
case   6 :
                    xpos 
=  (( float )img.Width  *  ( float ). 99 -  crSize.Width;
                    ypos 
=  (( float )img.Height  *  ( float ). 50 -  (crSize.Height  /   2 );
                    
break ;
                
case   7 :
                    xpos 
=  ( float )img.Width  *  ( float ). 01 ;
                    ypos 
=  (( float )img.Height  *  ( float ). 99 -  crSize.Height;
                    
break ;
                
case   8 :
                    xpos 
=  (( float )img.Width  *  ( float ). 50 -  (crSize.Width  /   2 );
                    ypos 
=  (( float )img.Height  *  ( float ). 99 -  crSize.Height;
                    
break ;
                
case   9 :
                    xpos 
=  (( float )img.Width  *  ( float ). 99 -  crSize.Width;
                    ypos 
=  (( float )img.Height  *  ( float ). 99 -  crSize.Height;
                    
break ;
            }
            g.DrawString(watermarkText, drawFont, 
new  SolidBrush(Color.White), xpos  +   1 , ypos  +   1 );
            g.DrawString(watermarkText, drawFont, 
new  SolidBrush(Color.Black), xpos, ypos);
            ImageCodecInfo[] codecs 
=  ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici 
=   null ;
            
foreach  (ImageCodecInfo codec  in  codecs)
            {
                
if  (codec.MimeType.IndexOf( " jpeg " >   - 1 )
                {
                    ici 
=  codec;
                }
            }
            EncoderParameters encoderParams 
=   new  EncoderParameters();
            
long [] qualityParam  =   new   long [ 1 ];
            
if  (quality  <   0   ||  quality  >   100 )
            {
                quality 
=   80 ;
            }
            qualityParam[
0 =  quality;
            EncoderParameter encoderParam 
=   new  EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[
0 =  encoderParam;
            
if  (ici  !=   null )
            {
                img.Save(filename, ici, encoderParams);
            }
            
else
            {
                img.Save(filename);
            }
            g.Dispose();
            
// bmp.Dispose();
            img.Dispose();
        }
    }

调用:
ContractedBlock.gif ExpandedBlockStart.gif Code
System.Drawing.Image img = System.Drawing.Image.FromStream(InputFile1.PostedFile.InputStream);//用上传控件加载图片
            
//System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("~/bb.jpg"));//用加字件加载图片

            
string fileName = Server.MapPath("~/aa.jpg");
            
string waterName = Server.MapPath("~/water.jpg");

            
//图片水印
            ImageWaterMark.AddImageSignPic(img, fileName, waterName, 3806);
            
//文字水印
            
//ImageWaterMark.AddImageSignText(img, fileName, "水印测试", 3, 100, "宋体", 12);

转载于:https://www.cnblogs.com/Gsun/archive/2010/03/30/1700444.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值