【问题标题】:generating jpg thumbnails in dotnet在 dotnet 中生成 jpg 缩略图
【发布时间】:2014-08-19 07:23:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# image


    【解决方案1】:

    尝试绘制图像 - 重新编辑

        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 毫秒

    【讨论】:

    • 如果我想要它是 jpg 怎么办
    • 因为原图是jpg
    • 这是在一个返回“图像”的函数中,无论如何要让这段代码返回一个 jpg 的图像对象而不是保存它?
    • jpeg是一种存储形式,为什么需要它作为jpg?
    • @mek -> newBitmap.Save(TargetStream, ImageFormat.Jpeg);将位图保存到您选择的 Jpeg 流中。其他格式可在 ImageFormat 枚举中找到
    【解决方案2】:

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

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

    是否注意到像 Picassa 或 Windows Explorer 之类的程序似乎可以超快速地创建缩略图?他们就是这样做的(当它们尚未缓存时)。

    在任何基于独立 JPEG 组库代码的库中都可以轻松使用此功能,而且大多数库都可以使用。例如 ImageMagick,它有一个可用的 .NET 层。

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

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

    【讨论】:

    【解决方案3】:

    试试看:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2011-04-01
      • 2015-08-24
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多