C#创建缩略图(低质量和大尺寸问题)

时间:2010-05-18 13:47:52

标签: c# image resize thumbnails

public void CreateThumbnail(Image img1, Photo photo, string targetDirectoryThumbs)
        {
            int newWidth = 700;
            int newHeight = 700;
            double ratio = 0;

            if (img1.Width > img1.Height)
            {
                ratio = img1.Width / (double)img1.Height;
                newHeight = (int)(newHeight / ratio);
            }
            else
            {
                ratio = img1.Height / (double)img1.Width;
                newWidth = (int)(newWidth / ratio);
            }

            Image bmp1 = img1.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
            bmp1.Save(targetDirectoryThumbs + photo.PhotoID + ".jpg");

            img1.Dispose();
            bmp1.Dispose();
        }

我已将700px放入,以便您可以更好地了解问题。 这是original图片和resized图片。

有什么好建议吗?

谢谢,
ILE

5 个答案:

答案 0 :(得分:6)

您应该找到this question的答案。它包含一个用于在C#中进行高质量图像缩放的示例。

我的其他答案中的完整示例包括如何将图像另存为jpeg。

这是相关的代码......

    /// <summary> 
    /// Resize the image to the specified width and height. 
    /// </summary> 
    /// <param name="image">The image to resize.</param> 
    /// <param name="width">The width to resize to.</param> 
    /// <param name="height">The height to resize to.</param> 
    /// <returns>The resized image.</returns> 
    public static System.Drawing.Bitmap ResizeImage(System.Drawing.Image image, int width, int height) 
    { 
        //a holder for the result 
        Bitmap result = new Bitmap(width, height); 

        //use a graphics object to draw the resized image into the bitmap 
        using (Graphics graphics = Graphics.FromImage(result)) 
        { 
            //set the resize quality modes to high quality 
            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
            //draw the image into the target bitmap 
            graphics.DrawImage(image, 0, 0, result.Width, result.Height); 
        } 

        //return the resulting bitmap 
        return result; 
    } 

答案 1 :(得分:2)

如果图片包含缩略图,它会自动将其拉伸到所需的大小......这会使它看起来像垃圾(就像你的情况一样;)

直接离开MSDN ......

  

如果图像包含嵌入式   缩略图图像,此方法检索   嵌入的缩略图并缩放它   达到要求的尺寸。如果是图像   不包含嵌入的缩略图   图像,此方法创建缩略图   缩放主图像的图像。

在你的情况下,我只是仔细检查了源图像的缩略图并得到了这个......

  • 新Windows缩略图:JPEG格式(偏移量:830大小:3234)
  • 缩略图类型:JPEG
  • Thumnail宽度:112
  • 缩略图高度:84

答案 2 :(得分:1)

尝试将原始图像绘制到另一个较小的图像,然后保存结果。

Bitmap bmp1 = new Bitmap(newWidth, newHeight);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(img1, 0, 0, newWidth, newHeight);
bmp1.Save(targetDirectoryThumbs + photo.PhotoID + ".jpg", ImageFormat.Jpeg);

答案 3 :(得分:0)

您是否可以使用第三方应用程序?如果是这样,您可能需要查看ImageMagick来管理缩略图创建。有一个.NET包装器。

http://imagemagick.codeplex.com/

答案 4 :(得分:0)

我写了一个免费的.dll,很容易做到这一点。如果您想查看文档,就在这里.... Git Repository & Tutorial