在dotnet中生成jpg缩略图

时间:2009-03-23 10:06:26

标签: c# image

我正在使用此代码拍摄jpg图像并将其保存为缩略图,但它似乎很慢..

        Image thumbNail = image.GetThumbnailImage(width, height, null, new IntPtr());

有没有更快的方法从图像目录生成大量缩略图?

3 个答案:

答案 0 :(得分:6)

尝试绘制图像 - 重新编辑

    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-8ms

答案 1 :(得分:6)

1)到目前为止,创建.Jpg缩略图的最快和最可靠的方法是使用部分解压缩。

Jpg有一个独特的方面,它可以提取原始的1/8大小或1/16大小(或任何2大小的力量)副本,而无需解压缩或采样整个原始图像。

有没有注意到像Picassa或Windows Explorer这样的程序似乎如此超快速地创建缩略图?这就是他们这样做的方式(当它们尚未缓存时)。

基于Independent JPEG Group库代码的任何库中都可以轻松使用此功能,其中大部分都是。例如,ImageMagick可以使用.NET层。

2)您可以使用像libjpeg turbo这样的硬件加速库来进一步提高速度,尽管它可能需要互操作。

3)对此特殊.jpg功能的一些解释是here

答案 2 :(得分:1)

试一试:

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。