Posted on 2004-11-08 08:55
冷风.net 阅读(841)
评论(1) 编辑 收藏 网摘 所属分类:
C#
//*************************************************************************************************
//完成日期: 2004-11-5
//作者: 何利民
//程序功能: 生成水印圖片
//*************************************************************************************************
using System;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Imaging;

namespace ImagesSpaceName


{


public class WaterImage : ImagesClass

{


定義類變量#region 定義類變量

private string _waterName = "冷風.net制作"; //水印文字
private Image _waterImage = null; //圖片
private string _fileName = null; //水印圖片要保存的文件名
private Align _align = ImagesSpaceName.Align.right; //水印圖片的水平對齊方式
private Valign _valign = ImagesSpaceName.Valign.bottom; //水印圖片的垂直對齊方式
private int _fontSize =14; //水印字體大小
private string _fontColor = "#EBEBEB"; //前景水印字體顏色
private string _bgfontColor = "#000000"; //水印字體陰影顏色
private string _fontFamily = "新細明體"; //水印字體名稱
private int _imgWidth = 120; //最終圖片的寬度
private int _imgHeight = 120; //最終圖片的高度

private bool _scanleImg = false; //是否壓縮圖片

public string ErrorInfo = null; //錯誤信息

#endregion


定義屬性#region 定義屬性

/**//// <summary>
/// 字體水平對齊
/// </summary>
public Align Align

{
set

{
_align = value;
}
}


/**//// <summary>
/// 字體垂直對齊
/// </summary>
public Valign Valign

{
set

{
_valign = value;
}
}


/**//// <summary>
/// 水印字體大小
/// </summary>
public int FontSize

{
set

{
_fontSize = value;
}
}


/**//// <summary>
/// 前景水印字體顏色
/// </summary>
public string FontColor

{
set

{
_fontColor = value;
}
}


/**//// <summary>
/// 水印字體名稱
/// </summary>
public string FontFamily

{
set

{
_fontFamily = value;
}
}


/**//// <summary>
/// 水印字體陰影顏色
/// </summary>
public string BgFontColor

{
set

{
_bgfontColor = value;
}
}


/**//// <summary>
/// 圖片寬度
/// </summary>
public int ImgWidth

{
get

{
return _imgWidth;
}
set

{
_imgWidth = value;
}
}


/**//// <summary>
/// 圖片高度
/// </summary>
public int ImgHeight

{
get

{
return _imgHeight;
}
set

{
_imgHeight = value;
}
}


/**//// <summary>
/// 是否壓縮圖片
/// </summary>
public bool ScanleImg

{
set

{
_scanleImg = value;
}
}


#endregion


初使化購選函數#region 初使化購選函數
public WaterImage()

{
}
#endregion


給JPG圖片加水印 void WaterPicture(string,string, int)#region 給JPG圖片加水印 void WaterPicture(string,string, int)


/**//// <summary>
/// 生成水印圖片主流程
/// </summary>
private void WaterMain()

{
if(_scanleImg)

{
ScanleImage objScanle = new ScanleImage();
_waterImage = objScanle.ScanleImg(_waterImage,_imgWidth,_imgHeight);
}
else

{
_imgWidth = _waterImage.Width;
_imgHeight = _waterImage.Height;
}

MakeWater();
if(_fileName==null)

{
SaveImage(_waterImage,ImageFormat.Jpeg);
}
else

{
SaveImage(_waterImage,ImageFormat.Jpeg,_fileName);
}
}


/**//// <param name="FileName">圖片文件名</param>
/// <param name="font">水印文字</param>
public void WaterPicture(string fileName,string font)

{
if(this.ExistsFile(fileName))

{
if(this.GetFile_Ext(fileName)=="jpg")

{
_waterImage = Image.FromFile(fileName);
_waterName = font;
this.WaterMain();
}
else

{
this.ErrorInfo = "只能給圖片加水印";
throw new Exception("只能給圖片加水印");
}
}
else

{
this.ErrorInfo = "不存在此文件";
throw new Exception("不存在此文件");
}
}


/**//// <param name="formName">要生成水印的圖片名</param>
/// <param name="toName">生成水印後的圖片名</param>
/// <param name="font">水印文字</param>
public void WaterPicture(string formName,string toName, string font)

{
if(this.ExistsFile(formName))

{
if(this.GetFile_Ext(formName)=="jpg")

{
_waterImage = Image.FromFile(formName);
_waterName = font;
_fileName = toName;
this.WaterMain();
}
else

{
this.ErrorInfo = "只能給圖片加水印";
throw new Exception("只能給圖片加水印");
}
}
else

{
this.ErrorInfo = "不存在此文件";
throw new Exception("不存在此文件");
}
}


/**//// <param name="fileStream">文件緩沖塊</param>
/// <param name="font">水印文字</param>
public void WaterPicture(System.IO.Stream fileStream,string font)

{
_waterImage = Image.FromStream(fileStream);
_waterName = font;
this.WaterMain();
}


/**//// <param name="fileStream">文件緩沖塊</param>
/// <param name="fileName">要保存的文件名</param>
/// <param name="font">水印文字</param>
public void WaterPicture(System.IO.Stream fileStream,string fileName, string font)

{
_waterImage = Image.FromStream(fileStream);
_waterName = font;
_fileName = fileName;
this.WaterMain();
}


/**//// <summary>
/// 在圖片上制作水印
/// </summary>
private void MakeWater()

{
float iTop = 5; //顯示字體y坐標
float iLeft = 5; //顯示字體X坐標
System.Drawing.SizeF objFontSize; //字體在繪圖區中所占的長寬
System.Drawing.Brush objBrush; //字體畫筆顏色

Font waterFont = new Font(_fontFamily,_fontSize);

try

{
System.Drawing.Graphics objGraphics = Graphics.FromImage(_waterImage);

objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
objFontSize = objGraphics.MeasureString(_waterName,waterFont);
switch(_align)

{
case ImagesSpaceName.Align.left:
iLeft = 0;
break;
case ImagesSpaceName.Align.center:
iLeft = (_waterImage.Width - objFontSize.Width)/2;
break;
case ImagesSpaceName.Align.right:
iLeft = _waterImage.Width - objFontSize.Width;
break;
default:
iLeft = 5;
break;
}
switch(_valign)

{
case ImagesSpaceName.Valign.top:
iTop = 0;
break;
case ImagesSpaceName.Valign.middle:
iTop = (_waterImage.Height - objFontSize.Height)/2;
break;
case ImagesSpaceName.Valign.bottom:
iTop = _waterImage.Height - objFontSize.Height;
break;
default:
iTop = 5;
break;
}
objBrush = new SolidBrush(ColorTranslator.FromHtml(_bgfontColor));
objGraphics.DrawString(_waterName,waterFont,objBrush,iLeft+1,iTop+1);
objBrush = new SolidBrush(ColorTranslator.FromHtml(_fontColor));
objGraphics.DrawString(_waterName,waterFont,objBrush,iLeft,iTop);
}
catch

{
this.ErrorInfo = "只有JPG圖片才能加水印";
throw new Exception("只有JPG圖片才能加水印");
}
}

#endregion

}
}