java将图片压缩到1M
时间: 2024-03-08 09:49:19 浏览: 17
在Java中,您可以使用ImageIO和BufferedImage类将图像压缩到1MB以下。下面是一个简单的Java代码示例,可以将指定图像文件压缩到1MB以下并保存到指定位置:
```
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import javax.imageio.ImageWriter;
import javax.imageio.IIOImage;
import javax.imageio.ImageWriteParam;
public class ImageCompressor {
public static void main(String[] args) throws IOException {
// 读入原始图像文件
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
// 获取所有支持JPEG格式的ImageWriter
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
if (!writers.hasNext()) {
throw new IllegalStateException("No writers found");
}
ImageWriter writer = writers.next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
// 设置压缩质量
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionQuality(0.7f);
// 创建字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 将压缩后的图像写入字节数组输出流
writer.setOutput(new MemoryCacheImageOutputStream(baos));
writer.write(null, new IIOImage(originalImage, null, null), writeParam);
// 将字节数组输出流中的数据写入文件
FileOutputStream fos = new FileOutputStream(new File("compressed.jpg"));
fos.write(baos.toByteArray());
fos.close();
}
}
```
在上面的示例中,我们首先使用ImageIO读取原始图像文件。然后,我们获取所有支持JPEG格式的ImageWriter,并设置压缩质量。接下来,我们创建一个字节数组输出流,并将压缩后的图像写入该输出流。最后,我们将字节数组输出流中的数据写入文件,完成压缩操作。
需要注意的是,压缩质量设置为0.7f,这意味着图像质量可能会略有损失,但是可以将图像文件大小压缩到1MB以下。如果您需要更高的图像质量,可以将压缩质量设置为1.0f,但是图像文件大小可能会超过1MB。