namespace
System.Images.ImagesHelper
{
/**/
/// <summary>
///ImgOperate 的摘要说明
/// </summary>
public
class
ImagesHelper
{
图片处理类构造方法#region 图片处理类构造方法
/**/
/// <summary>
/// 图片处理类构造方法
/// </summary>
public
ImagesHelper()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
#endregion
用于缩小图片#region 用于缩小图片
//************************************************************//
//下面给出三个简单的方法,后面两个方法是扩展
//************************************************************//
/**/
/// <summary>
///用于缩小图片
/// </summary>
/// <param name="strOldPic">原始图片路径</param>
/// <param name="strNewPic">新图片路径</param>
/// <param name="intWidth">新图片宽度</param>
/// <param name="intHeight">新图片高度</param>
/// <param name="isDeleteOldPic">是否删除原始图片</param>
public
void
ReducePic(
string
strOldPic,
string
strNewPic,
int
intWidth,
int
intHeight,
bool
isDeleteOldPic)
{
System.Drawing.Bitmap objPic, objNewPic;
try
{
objPic =
new
System.Drawing.Bitmap(strOldPic);
objNewPic =
new
System.Drawing.Bitmap(objPic, intWidth, intHeight);
objNewPic.Save(strNewPic);
objPic.Dispose();
objNewPic.Dispose();
if
(isDeleteOldPic)
{
if
(File.Exists(strOldPic))
{
File.Delete(strOldPic);
}
}
}
catch
(Exception exp) {
throw
exp; }
finally
{
objPic =
null
;
objNewPic =
null
;
}
}
/**/
/// <summary>
/// 将图片缩放至指定类型指定值
/// </summary>
/// <param name="strOldPic">原始图片路径</param>
/// <param name="strNewPic">新图片路径</param>
/// <param name="intValue">指定值</param>
/// <param name="type">缩放类型(W/w为指定宽度,H/h为指定高度)</param>
/// <param name="isDeleteOldPic">是否删除原始图片</param>
public
void
ReducePic(
string
strOldPic,
string
strNewPic,
int
intValue,
string
type,
bool
isDeleteOldPic)
{
System.Drawing.Bitmap objPic, objNewPic;
int
intWidth = 0;
int
intHeight = 0;
try
{
objPic =
new
System.Drawing.Bitmap(strOldPic);
if
(type ==
"W"
|| type ==
"w"
)
{
intWidth = intValue;
intHeight = Convert.ToInt32(((intWidth * 1.0) / (objPic.Width * 1.0)) * objPic.Height);
}
else
if
(type ==
"H"
|| type ==
"h"
)
{
intHeight = intValue;
intWidth = Convert.ToInt32(((intHeight * 1.0) / (objPic.Height * 1.0)) * objPic.Width);
}
else
{
throw
new
Exception(
"未指定图片缩放类型"
);
}
objNewPic =
new
System.Drawing.Bitmap(objPic, intWidth, intHeight);
objNewPic.Save(strNewPic);
objPic.Dispose();
objNewPic.Dispose();
if
(isDeleteOldPic)
{
if
(File.Exists(strOldPic))
{
File.Delete(strOldPic);
}
}
}
catch
(Exception exp) {
throw
exp; }
finally
{
objPic =
null
;
objNewPic =
null
;
}
}
/**/
/// <summary>
/// 用于缩放图片
/// </summary>
/// <param name="strOldPic">原始图片路径</param>
/// <param name="strNewPic">新图片路径</param>
/// <param name="balance">缩放比例</param>
/// <param name="isDeleteOldPic">是否删除原始图片</param>
public
void
ReducePic(
string
strOldPic,
string
strNewPic,
double
balance,
bool
isDeleteOldPic)
{
System.Drawing.Bitmap objPic, objNewPic;
try
{
objPic =
new
System.Drawing.Bitmap(strOldPic);
int
intWidth = Convert.ToInt32((objPic.Width) * balance);
int
intHeight = Convert.ToInt32((objPic.Height) * balance);
objNewPic =
new
System.Drawing.Bitmap(objPic, intWidth, intHeight);
objNewPic.Save(strNewPic);
objPic.Dispose();
objNewPic.Dispose();
if
(isDeleteOldPic)
{
if
(File.Exists(strOldPic))
{
File.Delete(strOldPic);
}
}
}
catch
(Exception exp) {
throw
exp; }
finally
{
objPic =
null
;
objNewPic =
null
;
}
}
/**/
/// <summary>
/// 获取图片指定部分
/// </summary>
/// <param name="pPath">图片路径</param>
/// <param name="pSavePath">保存路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
public
void
ReducePic(
string
pPath,
string
pSavedPath,
int
pPartStartPointX,
int
pPartStartPointY,
int
pPartWidth,
int
pPartHeight,
int
pOrigStartPointX,
int
pOrigStartPointY)
{
System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath);
Bitmap partImg =
new
Bitmap(pPartWidth, pPartHeight);
Graphics graphics = Graphics.FromImage(partImg);
Rectangle destRect =
new
Rectangle(
new
Point(pPartStartPointX, pPartStartPointY),
new
Size(pPartWidth, pPartHeight));
//目标位置
Rectangle origRect =
new
Rectangle(
new
Point(pOrigStartPointX, pOrigStartPointY),
new
Size(pPartWidth, pPartHeight));
//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
partImg.Save(pSavedPath, ImageFormat.Jpeg);
}
#endregion
添加水印文字#region 添加水印文字
/**/
/// <summary>
/// 为上传的图片添加水印文字
/// </summary>
/// <param name="Path">原始图片路径</param>
/// <param name="Path_sy">水印图片路径</param>
/// <param name="WaterText">水印文字</param>
public
void
AddWaterText(
string
Path,
string
Path_sy,
string
WaterText)
{
string
addText = WaterText;
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
System.Drawing.Font f =
new
System.Drawing.Font(
"Verdana"
, 10);
System.Drawing.Brush b =
new
System.Drawing.SolidBrush(System.Drawing.Color.LightSlateGray);
g.DrawString(addText, f, b, image.Width - 100, image.Height - 20);
g.Dispose();
image.Save(Path_sy);
image.Dispose();
}
#endregion
为图片增加水印图片#region 为图片增加水印图片
/**/
/// <summary>
/// 在图片上生成图片水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_syp">生成的带图片水印的图片路径</param>
/// <param name="Path_sypf">水印图片路径</param>
public
void
AddWaterPic(
string
Path,
string
Path_syp,
string
Path_sypf)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(copyImage,
new
System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
image.Save(Path_syp);
image.Dispose();
}
#endregion
获取图片的高度和宽度#region 获取图片的高度和宽度
/**/
/// <summary>
/// 获取图片的高度和宽度
/// </summary>
/// <param name="imgurl">img图片的地址</param>
/// <returns></returns>
public
int
[] GetImgWidth(
string
imgurl)
{
System.Drawing.Image image;
image = System.Drawing.Image.FromFile(imgurl);
int
imgwidth = image.Width;
int
imgHeight = image.Height;
int
[] img = { imgwidth, imgHeight };
return
img;
}
#endregion
压缩图片#region 压缩图片
/**/
/// <summary>
/// 对图片进行压缩
/// </summary>
/// <param name="filePath">原始图片路径</param>
/// <param name="filePath_ystp">压缩后的图片路径</param>
public
void
DensityPic(
string
filePath,
string
filePath_ystp)
//压缩图片
{
Bitmap bmp =
new
Bitmap(filePath);
//ImageCoderInfo
ImageCodecInfo ici =
null
;
//Encoder
System.Drawing.Imaging.Encoder ecd =
null
;
//EncoderParameter
EncoderParameter ept =
null
;
//EncoderParameters
EncoderParameters eptS =
null
;
try
{
ici =
this
.getImageCoderInfo(
"image/jpeg"
);
ecd = System.Drawing.Imaging.Encoder.Quality;
eptS =
new
EncoderParameters(1);
ept =
new
EncoderParameter(ecd, 10L);
eptS.Param[0] = ept;
bmp.Save(filePath_ystp, ici, eptS);
}
catch
(Exception ex)
{
throw
new
Exception(ex.Message);
}
finally
{
bmp.Dispose();
ept.Dispose();
eptS.Dispose();
}
}
private
ImageCodecInfo getImageCoderInfo(
string
coderType)
// 获取图片编码类型信息
{
ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo retIci =
null
;
foreach
(ImageCodecInfo ici
in
iciS)
{
if
(ici.MimeType.Equals(coderType))
retIci = ici;
}
return
retIci;
}
#endregion
获取图片的指定部分#region 获取图片的指定部分
/**/
/**/
/**/
/// <summary>
/// 获取图片指定部分
/// </summary>
/// <param name="pPath">图片路径</param>
/// <param name="pSavePath">保存路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
/// <param name="pFormat">保存格式,通常可以是jpeg</param>
public
void
GetPart(
string
pPath,
string
pSavedPath,
int
pPartStartPointX,
int
pPartStartPointY,
int
pPartWidth,
int
pPartHeight,
int
pOrigStartPointX,
int
pOrigStartPointY)
{
string
normalJpgPath = pSavedPath;
using
(System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
{
Bitmap partImg =
new
Bitmap(pPartWidth, pPartHeight);
Graphics graphics = Graphics.FromImage(partImg);
Rectangle destRect =
new
Rectangle(
new
Point(pPartStartPointX, pPartStartPointY),
new
Size(pPartWidth, pPartHeight));
//目标位置
Rectangle origRect =
new
Rectangle(
new
Point(pOrigStartPointX, pOrigStartPointY),
new
Size(pPartWidth, pPartHeight));
//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
/**/
///文字水印
System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
System.Drawing.Font f =
new
Font(
"Lucida Grande"
, 6);
System.Drawing.Brush b =
new
SolidBrush(Color.Gray);
G.Clear(Color.White);
graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
G.DrawString(
"TianTang.Com"
, f, b, 0, 0);
G.Dispose();
originalImg.Dispose();
if
(File.Exists(normalJpgPath))
{
File.SetAttributes(normalJpgPath, FileAttributes.Normal);
File.Delete(normalJpgPath);
}
partImg.Save(normalJpgPath, ImageFormat.Jpeg);
}
}
#endregion
获取图片的指定部分#region 获取图片的指定部分
/**/
/**/
/**/
/// <summary>
/// 获取按比例缩放的图片指定部分
/// </summary>
/// <param name="pPath">图片路径</param>
/// <param name="pSavePath">保存路径</param>
/// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
/// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
/// <param name="pPartWidth">目标图片的宽度</param>
/// <param name="pPartHeight">目标图片的高度</param>
/// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
/// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
/// <param name="imageWidth">缩放后的宽度</param>
/// <param name="imageHeight">缩放后的高度</param>
public
void
GetPart(
string
pPath,
string
pSavedPath,
int
pPartStartPointX,
int
pPartStartPointY,
int
pPartWidth,
int
pPartHeight,
int
pOrigStartPointX,
int
pOrigStartPointY,
int
imageWidth,
int
imageHeight)
{
string
normalJpgPath = pSavedPath;
using
(System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
{
if
(originalImg.Width == imageWidth && originalImg.Height == imageHeight)
{
GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY);
return
;
}
System.Drawing.Image.GetThumbnailImageAbort callback =
new
System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
System.Drawing.Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);
//缩放
Bitmap partImg =
new
Bitmap(pPartWidth, pPartHeight);
Graphics graphics = Graphics.FromImage(partImg);
Rectangle destRect =
new
Rectangle(
new
Point(pPartStartPointX, pPartStartPointY),
new
Size(pPartWidth, pPartHeight));
//目标位置
Rectangle origRect =
new
Rectangle(
new
Point(pOrigStartPointX, pOrigStartPointY),
new
Size(pPartWidth, pPartHeight));
//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
/**/
///文字水印
System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
System.Drawing.Font f =
new
Font(
"Lucida Grande"
, 6);
System.Drawing.Brush b =
new
SolidBrush(Color.Gray);
G.Clear(Color.White);
graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel);
G.DrawString(
"TianTang.Com"
, f, b, 0, 0);
G.Dispose();
originalImg.Dispose();
if
(File.Exists(normalJpgPath))
{
File.SetAttributes(normalJpgPath, FileAttributes.Normal);
File.Delete(normalJpgPath);
}
partImg.Save(normalJpgPath, ImageFormat.Jpeg);
}
}
public
bool
ThumbnailCallback()
{
return
false
;
}
#endregion
}
}
|