在发一个图片操作类
功能很简单,如果有什么不足之处,请大家多提出你们的宝贵意见。
源代码如下:
Code
引用图片处理类的命名空间#region 引用图片处理类的命名空间
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System; //系统命名空间
using System.IO; //用以实现输入输出操作
using System.Drawing; //用于图片处理
using System.Drawing.Imaging; //用于实现Image操作
using System.Drawing.Drawing2D; //用以实现绘制图片
using System.Text;
#endregion
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
}
}
引用图片处理类的命名空间#region 引用图片处理类的命名空间
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System; //系统命名空间
using System.IO; //用以实现输入输出操作
using System.Drawing; //用于图片处理
using System.Drawing.Imaging; //用于实现Image操作
using System.Drawing.Drawing2D; //用以实现绘制图片
using System.Text;
#endregion
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
}
}
作者:菜鸟小冰
出处:http://www.cnblogs.com/major/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-菜鸟小冰。