【问题标题】:Making image thumbnail smaller缩小图像缩略图
【发布时间】:2012-01-27 04:10:39
【问题描述】:

我有一个图像共享应用程序,用户上传图像并拍摄这些图像的缩略图......但是,一切正常,但有时图像缩略图(600 * 800)大小几乎是 1 mb,这是非常巨大的无论如何都要修改图像分辨率或其他东西以使大小像..100 kb或其他东西。这是我的代码。

    Bitmap bmp = new Bitmap(Width, Height);
            System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
            gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;

            System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, Width, Height);
            System.Drawing.Size rs = new System.Drawing.Size();
            rs.Height = Height;
            rs.Width = Width;
            gr.DrawImage(originalImage, new Rectangle(new Point(0, 0), rs), 0, 0,     originalImage.Width, originalImage.Height, GraphicsUnit.Pixel);
            string thumbnailPath = string.Concat(pathToSaveIn, thumbnailName);
            bmp.Save(thumbnailPath);
            gr.Dispose();

【问题讨论】:

  • 这是什么语言?视觉 C++?

标签: c# image-processing thumbnails


【解决方案1】:

图像大小调整代码看起来不错(乍一看)。但是,您将图像保存为位图格式,这是无损的 - 因此文件很大。

您可能希望使用 JPEG 来代替缩略图:对于照片等,这可以提供良好的压缩效果。

这可能会有所帮助:

    public void SaveImage(Bitmap image, string filename)
    {
        long quality = 80L;  // adjust as appropriate

        var qualityEncoder = Encoder.Quality;

        using (var encoderParameter = new EncoderParameter(qualityEncoder, quality))
        using (var encoderParams = new EncoderParameters(1))
        {
            encoderParams.Param[0] = encoderParameter;
            var jpegEncoder = GetEncoder(ImageFormat.Jpeg);
            image.Save(filename, jpegEncoder, encoderParams);
        }
    }

    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

        return codecs
            .Where(codec => codec.FormatID == format.Guid)
            .FirstOrDefault();
    }

【讨论】:

    【解决方案2】:

    这看起来像 .NET。 Scott Hanselman 对此有一篇很好的博客文章。本质上是对 NuGet 上的一个包的评论,这有助于解决这个问题。

    http://www.hanselman.com/blog/NuGetPackageOfWeek11ImageResizerEnablesCleanClearImageResizingInASPNET.aspx

    【讨论】:

      【解决方案3】:

      试试System.Drawing.Image.GetThumbnailImage。我自己没有用过,但看起来它可能会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-12
        • 2010-11-13
        • 1970-01-01
        • 2015-03-17
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        相关资源
        最近更新 更多