создание эскизов jpg в dotnet - PullRequest
1 голос
/ 23 марта 2009

Я использую этот код, чтобы сделать изображение в формате jpg и сохранить его в виде эскиза, но он кажется очень медленным ..

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

Есть ли более быстрый способ создания большого количества миниатюр из каталога изображений?

Ответы [ 3 ]

6 голосов
/ 09 апреля 2011

1) Самый быстрый и надежный способ создания эскизов .Jpg - это частичная распаковка.

Jpg имеют уникальный аспект в том, что можно извлечь копию оригинала размером 1/8 или 1/16 (или любой степени 2) без распаковки или выборки всего исходного изображения .

Когда-нибудь замечали, как такие программы, как Picassa или Windows Explorer, создают супер-эскизы очень быстро? Вот как они это делают (когда они еще не кэшированы).

Эта функция легко доступна в любой библиотеке на основе кода библиотеки Independent JPEG Group, и большинство из них есть. Например, ImageMagick с доступным слоем .NET.

2) Вы можете дополнительно увеличить скорость, используя аппаратно ускоренную библиотеку, такую ​​как libjpeg turbo , хотя для этого может потребоваться взаимодействие.

3) Некоторое объяснение этой специальной функции .jpg: здесь .

6 голосов
/ 23 марта 2009

Попробуйте нарисовать изображение - Повторно отредактировано

    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-4 МБ занимает от 4 до 8 мс

1 голос
/ 23 марта 2009

Попробуйте:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...