前言
需要根据自定义内容绘制图片
一、java图片绘制布局缩略图并上传oss
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
public class ThumbnailGenerator {
// 你的OSS配置信息
private static final String accessKeyId = "your_accessKeyId";
private static final String accessKeySecret = "your_accessKeySecret";
private static final String endpoint = "your_endpoint";
private static final String bucketName = "your_bucketName";
/**
* 生成图像缩略图
*
* @param htmlOrText 要生成缩略图的文本或html字符串或富文本
* @param thumbnailSize 缩略图大小
* @return 生成的缩略图文件名
*/
public static String generateThumbnail(String htmlOrText, int thumbnailSize) throws IOException {
// 创建临时文件
File tempFile = File.createTempFile("thumbnail", ".jpg");
// 生成缩略图
BufferedImage thumbnailImage = createThumbnailImage(htmlOrText, thumbnailSize);
// 写入缩略图到临时文件
ImageIO.write(thumbnailImage, "jpg", tempFile);
// 上传缩略图到OSS
String thumbnailFileName = uploadToOSS(tempFile);
// 删除临时文件
tempFile.delete();
// 返回缩略图文件名
return thumbnailFileName;
}
/**
* 创建缩略图图像
*
* @param htmlOrText 要生成缩略图的文本或html字符串或富文本
* @param thumbnailSize 缩略图大小
* @return 生成的缩略图图像
*/
private static BufferedImage createThumbnailImage(String htmlOrText, int thumbnailSize) throws IOException {
// 创建图像缓冲区
BufferedImage image = new BufferedImage(thumbnailSize, thumbnailSize, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
// 设置背景颜色
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
// 创建字体
Font font = new Font("Arial", Font.BOLD, thumbnailSize / 3);
graphics.setFont(font);
// 在缩略图中绘制文本或html字符串或富文本
drawString(htmlOrText, graphics, thumbnailSize);
// 释放资源
graphics.dispose();
// 返回生成的缩略图图像
return image;
}
/**
* 在缩略图中绘制文本或html字符串或富文本
*
* @param htmlOrText 要绘制的文本或html字符串或富文本
* @param graphics 缩略图绘图对象
* @param thumbnailSize 缩略图大小
*/
private static void drawString(String htmlOrText, Graphics2D graphics, int thumbnailSize) {
FontMetrics metrics = graphics.getFontMetrics();
// 将文本或html字符串或富文本分段
String[] lines = htmlOrText.split("\n");
// 计算每行文本的位置
int lineHeight = metrics.getHeight();
int y = (thumbnailSize - (lines.length * lineHeight)) / 2;
// 遍历每行文本,并在缩略图中绘制
for (String line : lines) {
int lineWidth = metrics.stringWidth(line);
int x = (thumbnailSize - lineWidth) / 2;
graphics.drawString(line, x, y + metrics.getAscent());
y += lineHeight;
}
}
/**
* 上传缩略图到OSS
*
* @param file 要上传的文件
* @return 上传后的文件名
*/
private static String uploadToOSS(File file) throws IOException {
// 创建OSS客户端
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 上传文件到OSS
InputStream inputStream = new FileInputStream(file);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(file.length());
String fileName = "thumbnail-" + System.currentTimeMillis() + ".jpg";
ossClient.putObject(bucketName, fileName, inputStream, metadata);
return fileName;
} finally {
// 关闭OSS客户端
ossClient.shutdown();
}
}
}