有生成高质量的GIF缩略图的代码吗? RT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Image类下有GetThunmbnailImage方法. GetThunmbnailImage只有一个重载 容易变型 参考 public void SplitTiffImage(string fileServerPath) { string currentMuilPageTiffName = Path.GetFileName(fileServerPath); Bitmap image = new Bitmap(fileServerPath); try { Guid objGuid = image.FrameDimensionsList[0]; FrameDimension objDimension = new FrameDimension(objGuid); //Saves every frame as a separate file. System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.Compression; int curFrame = 0; for (int i = 0; i < muilPageNum; i++) { image.SelectActiveFrame(objDimension, curFrame); EncoderParameters ep = new EncoderParameters(1); ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.CompressionLZW); ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); for (int j = 0; j < encoders.Length; j++) { if (encoders[j].MimeType == "image/gif") { info = encoders[j]; } } //Save the master bitmap string onePageTiffName = string.Format("{0}{1}.GIF", currentMuilPageTiffName, i.ToString()); string jpgFileName = onePageTiffName.Replace(".TIF", ".JPG"); createJpgFileString(jpgFileName, image.Width, image.Height); string onePageTiffphyPath = "img_in/Img_OnePageTiff/" + onePageTiffName; string onePageTiffServerPath = Server.MapPath(onePageTiffphyPath); image.Save(onePageTiffServerPath, info, ep); curFrame++; } image.Dispose(); System.GC.SuppressFinalize(image); } catch (Exception) { throw; } } 给你一个自己写的用的缩略图生成方法,默认使用的最高质量配置。取得 Image 保存成 gif 即可。 /// <summary> /// by vengair /// </summary> /// <param name="image"></param> /// <param name="percentage"></param> /// <returns></returns> private static Image GenerateThumbnailImage(Image image, int percentage) { Bitmap myBitmap = new Bitmap((int)(image.Width * percentage / 100), (int)(image.Height * percentage / 100)); Graphics myGraphics = Graphics.FromImage(myBitmap); // 绘制边框和背景 myGraphics.FillRectangle(Brushes.Gray, new Rectangle(0, 0, myBitmap.Width, myBitmap.Height)); myGraphics.FillRectangle(Brushes.White, new Rectangle(1, 1, myBitmap.Width - 2, myBitmap.Height - 2)); myGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic; myGraphics.SmoothingMode = SmoothingMode.HighQuality; myGraphics.DrawImage(image, new Rectangle(2, 2, myBitmap.Width - 4, myBitmap.Height - 4)); myGraphics.Dispose(); return (Image)myBitmap; } 很简单,新建一个100*100的位图,然后把原图以100*50画在上面,保存为Gif格式即可~ Bitmap bmp = new Bitmap(100,100);Bitmap bmpSrc = new Bitmap("C:\\src.Gif");//得到等比压缩的宽高int w = 100,h=100;if (bmpSrc.Width>bmpSrc.Height){ w = 100; h = bmpSrc.Height * 100 / bmpSrc.Width;}else{ h = 100; w = bmpSrc.Width * 100 / bmpSrc.Height;}Graphics g = Graphics.FromImage(bmp);g.FillRectangle(new SolidBrush(Color.White),0,0,bmp.Width,bmp.Height);g.DrawImage(bmpSrc,(100-w)/2,(100-h)/2,w,h);g.Dispose();bmp.Save("C:\\dest.Gif",ImageFormat.Gif);bmp.Dispose();bmpSrc.Dispose(); 需要using System.Drawing;using System.Drawing.Imaging; //忘记设质量了,加上Bitmap bmp = new Bitmap(100,100);Bitmap bmpSrc = new Bitmap("C:\\src.Gif");//得到等比压缩的宽高int w = 100,h=100;if (bmpSrc.Width>bmpSrc.Height){ w = 100; h = bmpSrc.Height * 100 / bmpSrc.Width;}else{ h = 100; w = bmpSrc.Width * 100 / bmpSrc.Height;}Graphics g = Graphics.FromImage(bmp);g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.FillRectangle(new SolidBrush(Color.White),0,0,bmp.Width,bmp.Height);g.DrawImage(bmpSrc,(100-w)/2,(100-h)/2,w,h);g.Dispose();bmp.Save("C:\\dest.Gif",ImageFormat.Gif);bmp.Dispose();bmpSrc.Dispose(); viena太牛了你能回这么多层是因为三星还是利用csdn的bug? 好久不来CSDN现在能连续回复那么多层了么? .net生成的Gif损失很大,一般建议用jpg的 有没有这样的网页分析工具 asp.net怎么使用CSS 数据库和xml的问题 asp.net gridview如何局部刷新 文件上传至数据库 如何给存放上传文件的文件夹加密 .net调用存储过程的问题? 编译器错误消息: CS0016: 未能写入输出文件 我想一个页面调用另个页的void的弹出对话框!出现了.....! table控件可以实现数据的绑定吗? 关于表现层和数据层 进者有分 怎么让FileUpload控件PostBack啊?帮忙啊!
{
string currentMuilPageTiffName = Path.GetFileName(fileServerPath);
Bitmap image = new Bitmap(fileServerPath); try
{
Guid objGuid = image.FrameDimensionsList[0];
FrameDimension objDimension = new FrameDimension(objGuid); //Saves every frame as a separate file.
System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.Compression;
int curFrame = 0;
for (int i = 0; i < muilPageNum; i++)
{
image.SelectActiveFrame(objDimension, curFrame);
EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.CompressionLZW);
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; j++)
{
if (encoders[j].MimeType == "image/gif")
{
info = encoders[j];
}
} //Save the master bitmap
string onePageTiffName = string.Format("{0}{1}.GIF", currentMuilPageTiffName, i.ToString());
string jpgFileName = onePageTiffName.Replace(".TIF", ".JPG"); createJpgFileString(jpgFileName, image.Width, image.Height); string onePageTiffphyPath = "img_in/Img_OnePageTiff/" + onePageTiffName;
string onePageTiffServerPath = Server.MapPath(onePageTiffphyPath); image.Save(onePageTiffServerPath, info, ep); curFrame++;
}
image.Dispose();
System.GC.SuppressFinalize(image);
}
catch (Exception)
{
throw;
} }
取得 Image 保存成 gif 即可。 /// <summary>
/// by vengair
/// </summary>
/// <param name="image"></param>
/// <param name="percentage"></param>
/// <returns></returns>
private static Image GenerateThumbnailImage(Image image, int percentage)
{
Bitmap myBitmap = new Bitmap((int)(image.Width * percentage / 100), (int)(image.Height * percentage / 100));
Graphics myGraphics = Graphics.FromImage(myBitmap); // 绘制边框和背景
myGraphics.FillRectangle(Brushes.Gray, new Rectangle(0, 0, myBitmap.Width, myBitmap.Height));
myGraphics.FillRectangle(Brushes.White, new Rectangle(1, 1, myBitmap.Width - 2, myBitmap.Height - 2)); myGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
myGraphics.SmoothingMode = SmoothingMode.HighQuality;
myGraphics.DrawImage(image, new Rectangle(2, 2, myBitmap.Width - 4, myBitmap.Height - 4));
myGraphics.Dispose(); return (Image)myBitmap;
}
Bitmap bmpSrc = new Bitmap("C:\\src.Gif");
//得到等比压缩的宽高
int w = 100,h=100;
if (bmpSrc.Width>bmpSrc.Height)
{
w = 100;
h = bmpSrc.Height * 100 / bmpSrc.Width;
}
else
{
h = 100;
w = bmpSrc.Width * 100 / bmpSrc.Height;
}
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White),0,0,bmp.Width,bmp.Height);
g.DrawImage(bmpSrc,(100-w)/2,(100-h)/2,w,h);
g.Dispose();
bmp.Save("C:\\dest.Gif",ImageFormat.Gif);
bmp.Dispose();
bmpSrc.Dispose();
using System.Drawing;
using System.Drawing.Imaging;
Bitmap bmpSrc = new Bitmap("C:\\src.Gif");
//得到等比压缩的宽高
int w = 100,h=100;
if (bmpSrc.Width>bmpSrc.Height)
{
w = 100;
h = bmpSrc.Height * 100 / bmpSrc.Width;
}
else
{
h = 100;
w = bmpSrc.Width * 100 / bmpSrc.Height;
}
Graphics g = Graphics.FromImage(bmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.FillRectangle(new SolidBrush(Color.White),0,0,bmp.Width,bmp.Height);
g.DrawImage(bmpSrc,(100-w)/2,(100-h)/2,w,h);
g.Dispose();
bmp.Save("C:\\dest.Gif",ImageFormat.Gif);
bmp.Dispose();
bmpSrc.Dispose();
现在能连续回复那么多层了么?