如何根据宽高比调整图像大小而不会丢失质量?

时间:2013-05-31 10:38:49

标签: c# java image image-resizing image-quality

我正在处理当前应用程序中的图像,并面临很多问题,如调整图像大小,图像质量等。

我看到很多网站上传的图片质量好,尺寸最小。有一点我注意到图像质量在增加或减小尺寸时不会松动。

所以我的问题是什么是处理以下问题的有效技术

  1. 缩小图像尺寸长度
  2. 调整图片尺寸
  3. 例如,如果我想要最小图像尺寸应该是(宽度= 800 *高度= 600),那么如何在不考虑图像质量的情况下增加尺寸以及如何根据比例减小图像尺寸。

    我正在使用asp.net MVC3 C#,但您对任何语言的建议对我都有帮助。

1 个答案:

答案 0 :(得分:1)

  

我注意到,当增加或减小尺寸时,图像质量不会松动。

如果是这种情况,那么图像是矢量格式,例如SVG - PNG,当您增加尺寸时,JPEG图像将始终失去其质量,因为像素将被拉伸。有办法可以减轻这种情况,但无法彻底规避它。

如果你想用Java来缩放图像,那么你可以合理地获得质量:

BufferedImage scaled = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
BufferedImage scaledImage = scaleOp.filter(img, scaled);

决定图像缩放方式的关键部分是AffineTransformOp.TYPE_BICUBIC,它通常会给出最好的结果(无论如何都可以。)C#无疑会有一个类似的开关可以设置。比例因子由at.scale(2.0, 2.0);给出,这将使长度和高度增加2 - 如果您想要将尺寸缩小一半,请使用at.scale(0.5, 0.5)