/**
* base64 编码转换为 BufferedImage
*
* @param base64 不带前缀以9j/开头的
* @return BufferedImage对象
*/
public static BufferedImage base64ToBufferedImage(String base64) {
Base64.Decoder decoder = Base64.getDecoder();
try {
byte[] bytes = decoder.decode(base64);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
return ImageIO.read(byteArrayInputStream);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 添加边框
*
* @param image base64ToBufferedImage转换出来的image对象
* @param x 原点x坐标(原点一般在左上角)
* @param y 原点y坐标(原点一般在左上角)
* @param width 框宽
* @param height 框高
* @return
*/
public static BufferedImage addBorders(BufferedImage image, int x, int y, int width, int height) {
if (image == null) {
return null;
}
Graphics2D g2 = image.createGraphics();
//画笔颜色
g2.setColor(Color.RED);
//设置画笔粗细
BasicStroke stokeLine = new BasicStroke(8.0f);
g2.setStroke(stokeLine);
//矩形框(原点x坐标,原点y坐标,矩形的长,矩形的宽)
g2.drawRect(x, y, width, height);
g2.dispose();
return image;
}
/**
* BufferedImage转换为 MultipartFile
*
* @param image BufferedImage对象
* @return MultipartFile对象
*/
public static MultipartFile imageToMultipartFile(BufferedImage image) {
try {
//BufferedImage 转化为 ByteArrayOutputStream
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", out);
//ByteArrayOutputStream 转化为 byte[]
byte[] imageByte = out.toByteArray();
//将 byte[] 转为自定义的 MultipartFile对象(实现MultipartFile接口)
return new CustomMultipartFile(imageByte, "/9j");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
// base64转为image
BufferedImage image = ImageUtils.base64ToBufferedImage("9j........");
// 画框
ImageUtils.addBorders(image, 11, 12, 45, 72);
// image 转为 MultipartFile
MultipartFile multipartFile = ImageUtils.imageToMultipartFile(image);
//画框后的图片保存到Minio中
String url = MinioUtil.uploadFileMinio(multipartFile, "fileFormat");
}
Java图片画框,算法标记
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 由于最近的Java作业要求将图片放大缩小,主要就是选用一种插值算法,如最邻近插值、双线性二次插值、双线性三次插值,...
- 前言 最近公司孵化一个项目,里面涉及到大量的原创照片及图片,目前我们使用的明文水印,不但对用户体验有一定影响,并且...
- FuzzyDetection 图片择优(选择最清楚的图片)Java实现 效果不错 大家可以自己改成自己喜欢的语言 ...
- 先上效果图 1.为了实现图片的放到缩小,我选择了PhotoView 框架用于显示图片。 2.使用Glide 框架加...