java 快速按宽度等比例压缩图片并保证清晰度
时间: 2023-10-18 11:10:07 浏览: 169
你可以使用 Java 的 ImageIO 类和 BufferedImage 类来实现对图片按照宽度等比例压缩并保证清晰度的功能。具体实现步骤如下:
1. 使用 ImageIO 类的 read() 方法读取原始图片,并获取图片的宽度和高度。
2. 计算出按照指定宽度进行等比例缩放后的高度。
3. 创建一个 BufferedImage 对象,并使用 getGraphics() 方法获取 Graphics2D 对象。
4. 使用 Graphics2D 对象的 setRenderingHint() 方法设置抗锯齿和插值的属性。
5. 使用 Graphics2D 对象的 drawImage() 方法将原始图片绘制到 BufferedImage 对象中。
6. 使用 ImageIO 类的 write() 方法将 BufferedImage 对象写入到指定文件中。
下面是一个示例代码:
```java
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageUtils {
public static void compressImage(String srcPath, String destPath, int width) throws IOException {
File srcFile = new File(srcPath);
BufferedImage srcImage = ImageIO.read(srcFile);
int srcWidth = srcImage.getWidth();
int srcHeight = srcImage.getHeight();
int destHeight = srcHeight * width / srcWidth;
BufferedImage destImage = new BufferedImage(width, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = destImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.drawImage(srcImage, 0, 0, width, destHeight, null);
g2d.dispose();
ImageIO.write(destImage, "JPEG", new File(destPath));
}
}
```
在上面的代码中,compressImage() 方法接收三个参数:原始图片的路径、压缩后图片的路径和指定的宽度。该方法读取原始图片,计算出压缩后的高度,创建一个 BufferedImage 对象,并使用 Graphics2D 对象将原始图片绘制到 BufferedImage 对象中,最后将 BufferedImage 对象写入到指定文件中。
你可以根据自己的需要修改该方法,比如新增一个参数用于指定输出格式等。
阅读全文