java 按宽度等比例压缩图片 返回图片流
时间: 2023-08-06 08:07:43 浏览: 94
java对图片进行压缩
5星 · 资源好评率100%
如果你想要将按宽度等比例压缩后的图片以流的形式返回,可以稍微修改一下上面的代码。具体实现步骤如下:
1. 创建一个 ByteArrayOutputStream 对象,用于存储压缩后的图片数据。
2. 使用 ImageIO 类的 write 方法将新的 BufferedImage 对象输出到 ByteArrayOutputStream 对象中。
3. 使用 ByteArrayOutputStream 对象的 toByteArray 方法将压缩后的图片数据转换成字节数组。
4. 返回字节数组即可。
下面是修改后的 Java 代码示例:
```java
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageCompressor {
public static byte[] compressImage(String srcFilePath, int width) throws Exception {
// 读取原始图片文件
BufferedImage srcImage = ImageIO.read(new File(srcFilePath));
// 获取原始图片的宽度和高度
int srcWidth = srcImage.getWidth();
int srcHeight = srcImage.getHeight();
// 计算等比例缩小后的宽度和高度
int destWidth = width;
int destHeight = (int) (srcHeight * ((double) destWidth / srcWidth));
// 创建一个新的 BufferedImage 对象
BufferedImage destImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
// 绘制原始图片到新的 BufferedImage 对象上,并按比例缩小
Graphics2D g = destImage.createGraphics();
g.drawImage(srcImage, 0, 0, destWidth, destHeight, null);
g.dispose();
// 将新的 BufferedImage 对象输出到 ByteArrayOutputStream 对象中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(destImage, "jpg", baos);
// 返回压缩后的图片数据
return baos.toByteArray();
}
public static void main(String[] args) throws Exception {
byte[] compressedImageData = compressImage("original.jpg", 800);
// do something with the compressedImageData
}
}
```
上面的代码将原始图片文件 "original.jpg" 压缩成宽度为 800 像素的图片,将压缩后的图片数据存储在字节数组 compressedImageData 中,并返回该字节数组。你可以根据实际需求对返回的字节数组进行处理。
阅读全文