|
|
Posted on
2004-12-08 13:04
冷风.net
阅读( 514)
评论()
收藏
举报
//*************************************************************************************************
//完成日期: 2004-11-5
//作者: 何利民
//程序功能: 生成水印圖片
// 注:如是利用圖片作為水印,則調用時最後都多加一數字參數
//*************************************************************************************************
using System;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
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 WaterTitle _waterTitle = ImagesSpaceName.WaterTitle.none;//水印標題
private bool _scanleImg = false; //是否壓縮圖片
private Image _waterPic = null; //要附加到圖片中去的水印圖片對象
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;
}
}
public WaterTitle WaterTitle
 {
set
 {
_waterTitle = 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 saveName, string font)
 {
if(this.ExistsFile(formName))
 {
if(this.GetFile_Ext(formName)=="jpg")
 {
_waterImage = Image.FromFile(formName);
_waterName = font;
_fileName = saveName;
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 saveName, string font)
 {
_waterImage = Image.FromStream(fileStream);
_waterName = font;
_fileName = saveName;
this.WaterMain();
}
 /**//// <param name="fileStream">要生成水印圖片的緩沖塊</param>
/// <param name="waterStream">水印圖片緩沖塊</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(System.IO.Stream fileStream,System.IO.Stream waterStream,int iLog)
 {
_waterImage = Image.FromStream(fileStream);
_waterPic = Image.FromStream(waterStream);
this.WaterMain();
}
 /**//// <param name="fileStream">要生成水印圖片的緩沖塊</param>
/// <param name="waterFile">水印圖片文件名</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(System.IO.Stream fileStream,string waterFile,int iLog)
 {
_waterImage = Image.FromStream(fileStream);
_waterPic = Image.FromFile(waterFile);
this.WaterMain();
}
 /**//// <param name="fileStream">要生成水印圖片的緩沖塊</param>
/// <param name="waterStream">水印圖片緩沖塊</param>
/// <param name="fileName">最終圖片保存為</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(System.IO.Stream fileStream,System.IO.Stream waterStream,string saveName,int iLog)
 {
_waterImage = Image.FromStream(fileStream);
_waterPic = Image.FromStream(waterStream);
_fileName = saveName;
this.WaterMain();
}
 /**//// <param name="fileStream">要生成水印圖片的緩沖塊</param>
/// <param name="waterFile">水印圖片文件名</param>
/// <param name="fileName">最終圖片保存為</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(System.IO.Stream fileStream,string waterFile,string saveName,int iLog)
 {
_waterImage = Image.FromStream(fileStream);
_waterPic = Image.FromFile(waterFile);
_fileName = saveName;
this.WaterMain();
}
 /**//// <param name="fileName">要生成水印的圖片名</param>
/// <param name="waterStream">水印圖片緩沖塊</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(string fileName,System.IO.Stream waterStream,int iLog)
 {
_waterImage = Image.FromFile(fileName);
_waterPic = Image.FromStream(waterStream);
this.WaterMain();
}
 /**//// <param name="fileName">要生成水印的圖片名</param>
/// <param name="waterName">水印圖片文件名</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(string fileName,string waterName,int iLog)
 {
_waterImage = Image.FromFile(fileName);
_waterPic = Image.FromFile(waterName);
this.WaterMain();
}
 /**//// <param name="fileName">要生成水印的圖片名</param>
/// <param name="waterStream">水印圖片緩沖塊</param>
/// <param name="saveName">最終圖片保存為</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(string fileName,System.IO.Stream waterStream,string saveName,int iLog)
 {
_waterImage = Image.FromFile(fileName);
_waterPic = Image.FromStream(waterStream);
_fileName = saveName;
this.WaterMain();
}
 /**//// <param name="fileName">要生成水印的圖片名</param>
/// <param name="waterName">水印圖片文件名</param>
/// <param name="saveName">最終圖片保存為</param>
/// <param name="iLog">只要是數字就行(圖片作為水印)</param>
public void WaterPicture(string fileName,string waterName,string saveName,int iLog)
 {
_waterImage = Image.FromFile(fileName);
_waterPic = Image.FromFile(waterName);
_fileName = saveName;
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 = this.GetDrawing();
if(_waterPic==null)
 {
objGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
objFontSize = objGraphics.MeasureString(_waterName,waterFont);
iLeft = this.GetWaterX((int)objFontSize.Width);
iTop = this.GetWaterY((int)objFontSize.Height);
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);
}
else
 {
iLeft = this.GetWaterX(_waterPic.Width);
iTop = this.GetWaterY(_waterPic.Height);
System.Drawing.Rectangle rectangle = new Rectangle((int)iLeft,(int)iTop,_waterPic.Width,_waterPic.Height);
objGraphics.DrawImage(_waterPic,rectangle,0,0,_waterPic.Width,_waterPic.Height,GraphicsUnit.Pixel);
}
}
catch
 {
this.ErrorInfo = "只有JPG圖片才能加水印";
throw new Exception("只有JPG圖片才能加水印");
}
}
 /**//// <summary>
/// 獲得繪圖區
/// </summary>
private System.Drawing.Graphics GetDrawing()
 {
try
 {
int iHeight = 20;
if(_waterPic!=null) iHeight = _waterPic.Height;
System.Drawing.Bitmap bitmap = new Bitmap(_waterImage.Width,_waterImage.Height+iHeight);
Graphics objGraphics = Graphics.FromImage(bitmap);
System.Drawing.Rectangle rectangle;
switch(_waterTitle)
 {
case ImagesSpaceName.WaterTitle.bottom:
rectangle = new Rectangle(0,0,_waterImage.Width,_waterImage.Height);
objGraphics.DrawImage(_waterImage,rectangle,0,0,_waterImage.Width,_waterImage.Height,GraphicsUnit.Pixel);
_waterImage = bitmap;
break;
case ImagesSpaceName.WaterTitle.top:
rectangle = new Rectangle(0,iHeight,_waterImage.Width,_waterImage.Height);
objGraphics.DrawImage(_waterImage,rectangle,0,0,_waterImage.Width,_waterImage.Height,GraphicsUnit.Pixel);
_waterImage = bitmap;
break;
default:
objGraphics = Graphics.FromImage(_waterImage);
break;
}
return objGraphics;
}
catch
 {
this.ErrorInfo = "只有JPG圖片才能加水印";
throw new Exception("只有JPG圖片才能加水印");
}
}
 /**//// <summary>
/// 取得顯示水印左上解點的X座標
/// </summary>
/// <param name="objFontSize">字體在繪圖區中所占的長寬</param>
private float GetWaterX(int iWidth)
 {
float iLeft = 0;
switch(_align)
 {
case ImagesSpaceName.Align.left:
iLeft = 0;
break;
case ImagesSpaceName.Align.center:
iLeft = (_waterImage.Width - iWidth)/2;
break;
case ImagesSpaceName.Align.right:
iLeft = _waterImage.Width - iWidth;
break;
default:
iLeft = 5;
break;
}
return iLeft;
}
 /**//// <summary>
/// 取得顯示水印左上解點的Y座標
/// </summary>
/// <param name="objFontSize">字體在繪圖區中所占的長寬</param>
private float GetWaterY(int iHeight)
 {
float iTop = 0;
if(_waterTitle==ImagesSpaceName.WaterTitle.top)
 {
iTop = 0;
}
else if(_waterTitle==ImagesSpaceName.WaterTitle.bottom)
 {
iTop = _waterImage.Height - iHeight;
}
else
 {
switch(_valign)
 {
case ImagesSpaceName.Valign.top:
iTop = 0;
break;
case ImagesSpaceName.Valign.middle:
iTop = (_waterImage.Height - iHeight)/2;
break;
case ImagesSpaceName.Valign.bottom:
iTop = _waterImage.Height - iHeight;
break;
default:
iTop = 5;
break;
}
}
return iTop;
}
#endregion
}
}
|