【发布时间】:2014-08-19 07:23:18
【问题描述】:
我正在使用此代码拍摄 jpg 图像并将其保存为缩略图,但它似乎很慢..
Image thumbNail = image.GetThumbnailImage(width, height, null, new IntPtr());
有没有更快的方法从图像目录中生成大量缩略图?
【问题讨论】:
我正在使用此代码拍摄 jpg 图像并将其保存为缩略图,但它似乎很慢..
Image thumbNail = image.GetThumbnailImage(width, height, null, new IntPtr());
有没有更快的方法从图像目录中生成大量缩略图?
【问题讨论】:
尝试绘制图像 - 重新编辑
public Image ResizeImage(Image openImage, int NewWidth, int NewHeight) {
var openBitmap = new Bitmap(openImage);
var newBitmap = new Bitmap(NewWidth, NewHeight);
using (Graphics g = Graphics.FromImage(openBitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawImage(newBitmap, new Rectangle(0, 0, NewWidth, NewHeight));
}
openBitmap.Dispose(); //Clear The Old Large Bitmap From Memory
return (Image)newBitmap;
}
典型的 3-4mb 图像需要 4-8 毫秒
【讨论】:
1) 到目前为止,创建 .JPG 缩略图的最快和最可靠的方法是使用部分解压缩。
JPG 有一个独特的方面,它可以提取原始文件的 1/8 大小或 1/16 大小(或 2 大小的任何幂)副本无需解压缩或采样整个原始文件图片。
是否注意到像 Picassa 或 Windows Explorer 之类的程序似乎可以超快速地创建缩略图?他们就是这样做的(当它们尚未缓存时)。
在任何基于独立 JPEG 组库代码的库中都可以轻松使用此功能,而且大多数库都可以使用。例如 ImageMagick,它有一个可用的 .NET 层。
2) 您可以使用libjpeg turbo 等硬件加速库进一步提高速度,尽管它可能需要互操作。
3) 对此特殊 .jpg 功能的一些解释是here。
【讨论】:
试试看:
public bool GenerateThumbNail(string fileName, string thumbNailFileName,
ImageFormat format, int height, int width)
{
try
{
using (Image img = Image.FromFile(fileName))
{
Image thumbNail = new Bitmap(width, height, img.PixelFormat);
Graphics g = Graphics.FromImage(thumbNail);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
Rectangle rect = new Rectangle(0, 0, width, height);
g.DrawImage(img, rect);
thumbNail.Save(thumbNailFileName, format);
}
return true;
}
catch (Exception)
{
return false;
}
}
它也使用 DrawImage。
【讨论】: