【问题标题】:Resize an JPEG image without losing quality在不损失质量的情况下调整 JPEG 图像的大小
【发布时间】:2013-04-12 13:40:54
【问题描述】:

我有这段代码可以将图像大小调整为 300x300。但是在调整大小后,图像仍然失去了它的质量。我已经尝试过在其他网站上发布的其他解决方案,这些解决方案与此代码具有相同的代码实现,但它对我不起作用。请帮帮我。

Stream ream = FileUploadPic.FileContent;
            System.Drawing.Image i = new Bitmap(ream);

            Bitmap Orig_Photo = new Bitmap(i);
            Bitmap resize_Photo = new Bitmap(300,300);
            Graphics thumbnailGraph = Graphics.FromImage(resize_Photo);
            thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;
            thumbnailGraph.SmoothingMode = SmoothingMode.AntiAlias;
            thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
            thumbnailGraph.PixelOffsetMode = PixelOffsetMode.HighQuality;

            var imageRectangle = new Rectangle(0, 0, 300, 300);
            thumbnailGraph.DrawImage(i, imageRectangle);
            System.Drawing.Image ii = new Bitmap(resize_Photo);

【问题讨论】:

  • 输入图像的尺寸是多少?
  • 我在测试中使用的尺寸为 2709pxx2709px...但即使我尝试使用较小尺寸的图像,输出仍然相同。
  • 有什么方法可以分享样品吗?不确定“失去质量意味着什么”。如果您有直线或文本,双三次插值只会模糊每个像素与其相邻像素。
  • @Loud- 请访问此链接...这与我的图像输出相同...我尝试了该作者的解决方案但没有任何反应。weblogs.asp.net/gunnarpeipman/archive/2009/04/02/…

标签: asp.net c#-4.0


【解决方案1】:

这段代码我用过一次,你可以试试,这是c#版本

  Bitmap img = new Bitmap(newW, newH);
        using (Graphics g = Graphics.FromImage(img))
        {
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.DrawImage(srcImage, new Rectangle(0, 0, newW, newH));
        }

这里newWnewH 是您要调整图像大小的新高度和宽度。

您还需要包含using System.Drawing; 名称空间。

【讨论】:

  • @rahularyansharma-非常感谢......它现在正在工作......我现在的另一个问题是为什么每当我将它转换为字节数组时,它又变得低质量了?我希望你也可以帮我解决这个问题。谢谢。
  • 欢迎您,如果它适合您,您应该接受这个作为答案。除非您正在制作矢量图形,否则无法在不损失某些图像质量的情况下调整图像大小。
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多