C#高质量缩略图
private static Size NewSize( int maxWidth,
int maxHeight, int width,
int height )
{
double w = 0.0;
double h = 0.0;
double sw = Convert.ToDouble( width );
double sh = Convert.ToDouble( height ); double mw = Convert.ToDouble( maxWidth );
double mh = Convert.ToDouble( maxHeight ); if (sw < mw && sh < mh)
{
w = sw;
h = sh;
}
else if (( sw/sh ) > ( mw/mh ))
{
w = maxWidth;
h = ( w * sh )/sw;
}
else
{
h = maxHeight;
w = ( h * sw )/sh;
}
return new Size( Convert.ToInt32( w ), Convert.ToInt32( h ) );
}
public static void SendSmallImage( string fileName,
string newFile,
int maxHeight,
int maxWidth )
{
System.Drawing.Image img = System.Drawing.Image.FromFile( fileName );
System.Drawing.Imaging.ImageFormat
thisFormat = img.RawFormat;
Size newSize = NewSize( maxWidth, maxHeight, img.Width, img.Height );
Bitmap outBmp = new Bitmap( newSize.Width, newSize.Height );
Graphics g = Graphics.FromImage( outBmp );
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage( img, new Rectangle( 0, 0, newSize.Width, newSize.Height ),
0, 0, img.Width, img.Height, GraphicsUnit.Pixel );
g.Dispose( );
// 以下代码为保存图片时,设置压缩质量
EncoderParameters encoderParams = new EncoderParameters( );
long[] quality = new long[1];
quality[0] = 100;
EncoderParameter encoderParam = new EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality );
encoderParams.Param[0] = encoderParam;
//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders( );
ImageCodecInfo jpegICI = null;
for ( int x = 0;
x < arrayICI.Length;
x++ )
{
if ( arrayICI[x].FormatDescription.Equals( "JPEG" ) )
{
jpegICI = arrayICI[x];
//设置JPEG编码
break;
}
}
if ( jpegICI != null )
{
outBmp.Save( newFile, jpegICI, encoderParams );
}
else
{
outBmp.Save( newFile,
thisFormat );
}
img.Dispose( );
outBmp.Dispose( );
}
int maxHeight, int width,
int height )
{
double w = 0.0;
double h = 0.0;
double sw = Convert.ToDouble( width );
double sh = Convert.ToDouble( height ); double mw = Convert.ToDouble( maxWidth );
double mh = Convert.ToDouble( maxHeight ); if (sw < mw && sh < mh)
{
w = sw;
h = sh;
}
else if (( sw/sh ) > ( mw/mh ))
{
w = maxWidth;
h = ( w * sh )/sw;
}
else
{
h = maxHeight;
w = ( h * sw )/sh;
}
return new Size( Convert.ToInt32( w ), Convert.ToInt32( h ) );
}
public static void SendSmallImage( string fileName,
string newFile,
int maxHeight,
int maxWidth )
{
System.Drawing.Image img = System.Drawing.Image.FromFile( fileName );
System.Drawing.Imaging.ImageFormat
thisFormat = img.RawFormat;
Size newSize = NewSize( maxWidth, maxHeight, img.Width, img.Height );
Bitmap outBmp = new Bitmap( newSize.Width, newSize.Height );
Graphics g = Graphics.FromImage( outBmp );
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage( img, new Rectangle( 0, 0, newSize.Width, newSize.Height ),
0, 0, img.Width, img.Height, GraphicsUnit.Pixel );
g.Dispose( );
// 以下代码为保存图片时,设置压缩质量
EncoderParameters encoderParams = new EncoderParameters( );
long[] quality = new long[1];
quality[0] = 100;
EncoderParameter encoderParam = new EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality );
encoderParams.Param[0] = encoderParam;
//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders( );
ImageCodecInfo jpegICI = null;
for ( int x = 0;
x < arrayICI.Length;
x++ )
{
if ( arrayICI[x].FormatDescription.Equals( "JPEG" ) )
{
jpegICI = arrayICI[x];
//设置JPEG编码
break;
}
}
if ( jpegICI != null )
{
outBmp.Save( newFile, jpegICI, encoderParams );
}
else
{
outBmp.Save( newFile,
thisFormat );
}
img.Dispose( );
outBmp.Dispose( );
}
本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢