九宫格水印类

九宫格水印
   
     
public class WaterPicture
{
/// <summary>
/// 加图片水印
/// </summary>
/// <param name="img"> 来源System.Drawing.Image对象 </param>
/// <param name="filename"> 完成后保存文件路径(物理路径) </param>
/// <param name="watermarkFilename"> 水印文件路径(物理路径) </param>
/// <param name="watermarkStatus"> 图片水印位置(9宫格位置1-9) </param>
/// <param name="quality"> 图片质量(1-100) </param>
/// <param name="watermarkTransparency"> 透明度(1-10) </param>
public static void AddImageSignPic(Image img, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
{
Graphics g
= Graphics.FromImage(img);
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);

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="filename"> 文件名 </param>
/// <param name="watermarkText"> 水印文字 </param>
/// <param name="watermarkStatus"> 图片水印位置 </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();
img.Dispose();
}


/// <summary>
/// (重载) 增加图片文字水印
/// </summary>
/// <param name="filename"> 文件名 </param>
/// <param name="watermarkText"> 水印文字 </param>
/// <param name="watermarkStatus"> 图片水印位置 </param>
/// <param name="fontcolor"> 图片水印颜色 </param>
public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize, string fontcolor)
{

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(ColorTranslator.FromHtml(fontcolor)), xpos, ypos);
// g.DrawString(watermarkText, drawFont, new SolidBrush(Color.FromName(fontcolor)), 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();
img.Dispose();
}

}

 

你可能感兴趣的:(水印)