using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace common
{
public class Thumbnail
{
private string _orgPath;
private string _newPath;
private double _width;
private double _height;
private double _orgWidth;
private double _orgHeight;
private Image image;
/// <summary>
/// 构造函数
/// </summary>
public Thumbnail()
{
}
/// <summary>
/// 构造构数
/// </summary>
/// <param name="orgpath"></param>
public Thumbnail(string orgpath)
{
this.OrgPath = orgpath;
setWH();
}
/// <summary>
/// 构造构数
/// </summary>
/// <param name="image"></param>
public Thumbnail(Image image)
{
this.image = image;
this.OrgHeight= image.Height;
this.OrgWidth = image.Width;
}
/// <summary>
///
/// </summary>
/// <param name="orgpath">原路径</param>
/// <param name="newpath">新路径</param>
/// <param name="width">新宽度</param>
/// <param name="height">新高度</param>
/// <param name="orgwidth">原宽度</param>
/// <param name="orgheight">原高度</param>
public Thumbnail(string orgpath, string newpath, int width, int height, int orgwidth, int orgheight)
{
this.NewPath= newpath;
this.OrgPath = orgpath;
this.Width = width;
this.Height= height;
this.OrgWidth= orgwidth;
this.OrgHeight = orgheight;
}
/// <summary>
/// 原路径
/// </summary>
public string OrgPath
{
get
{
return _orgPath;
}
set
{
_orgPath = value;
}
}
/// <summary>
/// 新路径
/// </summary>
public string NewPath
{
get
{
return _newPath;
}
set
{
_newPath = value;
}
}
/// <summary>
/// 新高度
/// </summary>
public int Width
{
set
{
_width = value;
}
}
/// <summary>
/// 新宽度
/// </summary>
public int Height
{
set { _height = value; }
}
/// <summary>
/// 原宽度
/// </summary>
public int OrgWidth
{
set
{
_orgWidth = value;
}
}
/// <summary>
/// 原高度
/// </summary>
public int OrgHeight
{
set
{
_orgHeight = value;
}
}
/// <summary>
/// 产生缩略图
/// </summary>
public void Make()
{
if (!string.IsNullOrEmpty(_orgPath))
{
image = Image.FromFile(_orgPath);
}
double w = _width;
double h = _height;
if (image.Width > w)
{
CreateThumbnail(_newPath, w, h);
}
else
{
image.Save(_newPath);
}
}
/// <summary>
/// 建立缩略图
/// </summary>
/// <param name="sFileDstPath">目标路径</param>
/// <param name="LimitW">限制宽</param>
/// <param name="LimitH">限制高</param>
private void CreateThumbnail(string sFileDstPath, double LimitW, double LimitH)
{
if (this.image != null)
{
System.Drawing.Image image = this.image as System.Drawing.Bitmap;
byte[] data;
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;
MemoryStream ms = new MemoryStream();
image.Save(ms, myImageCodecInfo, myEncoderParameters);
CreateThumbnail(ms.ToArray(), out data, LimitW, LimitH);
image = System.Drawing.Image.FromStream(new MemoryStream(data)) as System.Drawing.Bitmap;
image.Save(sFileDstPath);
}
}
/// <summary>
/// 生成缩略图纯数据
/// </summary>
/// <param name="data1">数据1</param>
/// <param name="data2">数据2</param>
/// <param name="LimitW">限宽</param>
/// <param name="LimitH">限高</param>
static public void CreateThumbnail(byte[] data1, out byte[] data2, double LimitW, double LimitH)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(new MemoryStream(data1)) as System.Drawing.Bitmap;
System.Drawing.SizeF size = new System.Drawing.SizeF(image.Width, image.Height);
size.Width = (float)LimitW;
size.Height = (float)LimitH;
if (size.Height <= 0)
{
size.Height = image.Height * size.Width / image.Width;
}
if (size.Width <= 0)
{
size.Width = image.Width * size.Height / image.Height;
}
System.Drawing.Image bitmap = new System.Drawing.Bitmap(Convert.ToInt16(size.Width), Convert.ToInt16(size.Height));
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.Clear(Color.Transparent);
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
g.DrawImage(image, rect, new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, myImageCodecInfo, myEncoderParameters);
data2 = ms.ToArray();
myEncoderParameter.Dispose();
myEncoderParameters.Dispose();
image.Dispose();
bitmap.Dispose();
g.Dispose();
ms.Dispose();
}
/// <summary>
/// 根据图片路径获取图片大小并设置
/// </summary>
private void setWH()
{
Bitmap bitmap = new Bitmap(_orgPath);
this.OrgWidth = bitmap.Width;
this.OrgHeight = bitmap.Height;
}
}
}