Java Minio 图片压缩教程:完整步骤及代码示例
以下是使用Java和Minio实现图片压缩的步骤:
- 导入必要的依赖包
在Java项目中,可以使用以下依赖包:
- Minio Client:用于连接和操作Minio对象存储服务。
- ImageIO:用于读取和写入图片文件。
- ImageIO-Ext:用于读取和写入更多的图片格式。
- Apache Commons IO:用于操作本地文件和流。
在Maven项目中,可以在pom.xml文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
- 连接到Minio服务
使用Minio Client连接到Minio服务,并获取要压缩的图片文件流。
// 初始化Minio Client
String endpoint = 'http://localhost:9000';
String accessKey = 'minioaccesskey';
String secretKey = 'miniosecretkey';
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
// 获取图片文件流
String bucketName = 'mybucket';
String objectName = 'myimage.jpg';
InputStream inputStream = minioClient.getObject(bucketName, objectName);
- 读取和压缩图片
使用ImageIO读取图片文件流,并压缩图片文件流。
// 读取图片
BufferedImage originalImage = ImageIO.read(inputStream);
// 压缩图片
int newWidth = 800;
int newHeight = (int) (originalImage.getHeight() * ((double) newWidth / originalImage.getWidth()));
BufferedImage compressedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
Graphics2D graphics = compressedImage.createGraphics();
graphics.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
graphics.dispose();
- 将压缩后的图片上传到Minio服务
将压缩后的图片文件流上传到Minio服务,并设置新的对象名称。
// 上传压缩后的图片
String newObjectName = 'mycompressedimage.jpg';
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(compressedImage, 'jpg', outputStream);
InputStream compressedInputStream = new ByteArrayInputStream(outputStream.toByteArray());
minioClient.putObject(bucketName, newObjectName, compressedInputStream, compressedInputStream.available(), null, null, null);
- 关闭资源
关闭所有打开的资源,例如输入流、输出流和Minio Client实例。
// 关闭资源
inputStream.close();
compressedInputStream.close();
minioClient.close();
完整代码示例:
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
public class ImageCompressionExample {
public static void main(String[] args) throws IOException {
try {
// 初始化Minio Client
String endpoint = 'http://localhost:9000';
String accessKey = 'minioaccesskey';
String secretKey = 'miniosecretkey';
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
// 获取图片文件流
String bucketName = 'mybucket';
String objectName = 'myimage.jpg';
InputStream inputStream = minioClient.getObject(bucketName, objectName);
// 读取图片
BufferedImage originalImage = ImageIO.read(inputStream);
// 压缩图片
int newWidth = 800;
int newHeight = (int) (originalImage.getHeight() * ((double) newWidth / originalImage.getWidth()));
BufferedImage compressedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
Graphics2D graphics = compressedImage.createGraphics();
graphics.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
graphics.dispose();
// 上传压缩后的图片
String newObjectName = 'mycompressedimage.jpg';
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(compressedImage, 'jpg', outputStream);
InputStream compressedInputStream = new ByteArrayInputStream(outputStream.toByteArray());
minioClient.putObject(bucketName, newObjectName, compressedInputStream, compressedInputStream.available(), null, null, null);
// 关闭资源
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(compressedInputStream);
minioClient.close();
} catch (MinioException e) {
System.out.println('Error occurred: ' + e);
}
}
}
原文地址: https://www.cveoy.top/t/topic/nsM6 著作权归作者所有。请勿转载和采集!