JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java实现图片合成,??1个工具轻松应对N种应用场景, 简单实用!

wys521 2024-11-25 10:57:19 精选教程 29 ℃ 0 评论

简介

当下的互联网电商发展是如火如荼,作为Java Coder,不可避免地会面对各种各样的客户,迎接千奇百怪的需求.

当你的客户让你每天给VIP客户发一个新颖的图片贺卡,或者你的老板让你每天产出一批美轮美奂的图文电邮,甚至于你的甲方爸爸让你给每个用户生成专属的页面背景,等等这类挠头的要求.
你的第一反应是拒绝还是准备让甲方准备好票子来买个AI助手?

今天,我来给大家推荐一个大神杰作,简单又实用的Java服务端图片合成工具,完全基于JdkGraphics扩展实现,使用超简单,性能还不错!

关注更新,提升自我,相信这里绝对有值得你收藏的干货 !

ImageCombiner

  • Maven依赖坐标
<dependency>
    <groupId>com.freewayso</groupId>
    <artifactId>image-combiner</artifactId>
    <!-- 强烈建议使用2.6.3之后的版本. -->
    <version>2.6.5</version>
</dependency>
  • MIT开源

https://gitee.com/dromara/image-combiner

话不多说,实践见真知!

我们定义个测试类,来体验各场景中,ImageCombiner的魅力:

class TestImageCombiner {  
	static String pathImage(String relativePath){  
	   return "file:///G:/图片/"+relativePath;  
	}
}

场景1. 简单合并图像

  • 我们准备把这两个小图片合并成一张图片
/**  
 * 简单合并图片  
 *    
 */@Test  
void scene1() throws Exception {  
   /*先定义一个60 * 60的背景板,图片格式定义为PNG*/  
   ImageCombiner combiner = new ImageCombiner(60, 60, OutputFormat.PNG);  
   /*添加第一张图片,设置高度为40.  
    *也可以在调用addImageElement方法时直接设定,只是感觉链式调用要美观一些.  
    * */
     
	/*addImageElement方法有4个重载:  
    * addImageElement (String imgUrl, int x, int y) => ImageElement
    * addImageElement(BufferedImage image,int x, int y) => ImageElement
    * addImageElement(String imgUrl,int x, int y, int width,int height,ZoomMode ZoomMode) => ImageElement  
    * addImageElement(BufferedImage image,int x, int y, int width,int height,ZoomMode zoomMode) =>ImageElement  
    * */ 
  combiner.addImageElement(pathImage("绘制矩形.png"), 0, 0).setHeight(40).setCenter(true);  
  combiner.addImageElement(pathImage("绘制矩形 (1).png"), 0, 20).setHeight(40).setCenter(true);  
  combiner.combine();  
   //保存到本地  
  combiner.save("G://图片/scene1.png");  
}
  • 合并结果如下:
  • 我们也可以给合并结果添加边框:
// ......
// 给合并结果添加边框  
combiner.addRectangleElement(0,0,60,60).setBorderSize(10);  
combiner.combine(); 
//保存到本地  
combiner.save("G://图片/scene1.png");
  • 添加边框效果如下:

场景2. 背景图上叠加内容

预设一个背景图,在背景上添加文字和图片.

  • 叠加文字
/**  
 * 背景图上叠加内容  
 */  
@Test  
void scene2() throws Exception {  
   // 预设背景图  
   /* ImageCombiner以下3个构造器,传入背景图支持网络协议:[https?],也支持[file]协议.  
    * 同样支持[BufferedImage]参数  
    * ImageCombiner(String bgImageUrl, OutputFormat outputFormat)
    * ImageCombiner(BufferedImage bgImage, OutputFormat outputFormat) 
    * ImageCombiner(String bgImageUrl, int width, int height, ZoomMode zoomMode, OutputFormat outputFormat)
    * ImageCombiner(BufferedImage bgImage, int width, int height, ZoomMode zoomMode, OutputFormat outputFormat)    
    * */ 
   ImageCombiner combiner = new ImageCombiner(pathImage("bg1.png"), OutputFormat.PNG);  
   combiner.addTextElement("图片合并哪家强", "微软雅黑", 30, 0, 0).setColor(Color.WHITE).setCenter(true);  
   combiner.combine();  
   combiner.save("G://图片/scene2.png");  
}
  • 叠加文字效果如下:
  • 也可以自定义Font设置字体:
Font font = new Font("宋体", Font.BOLD | Font.ITALIC, 30);  
combiner.addTextElement("ImageCombiner", font,0 , 40).setColor(Color.getHSBColor(100, 100, 100)).setCenter(true);
  • 效果挺不错:
  • 叠加另一张图片:
combiner.addImageElement(pathImage("java.png"), 0, 120).setCenter(true);
  • 效果如下:
  • 在叠加的时候设置叠加效果:
combiner.addImageElement(pathImage("java.png"), 0, 120).setCenter(true)  
      /*添加圆角*/  
      .setRoundCorner(30)  
      /*设置透明度*/  
      .setAlpha(0.8F)  
      /*旋转角度*/  
      .setRotate(20)  
      /*高斯模糊,实现毛玻璃效果*/  
      .setBlur(1);
  • 效果如下:

场景3.实现二维码名片效果

/**  
 * 实现二维码名片效果  
 */
@Test  
void scene3() throws Exception{  
   /*先定义一个300 * 500 的背景板,图片格式定义为PNG*/  
   ImageCombiner combiner = new ImageCombiner(300, 500, OutputFormat.PNG);  
   /*设置画板圆角*/  
   combiner.setCanvasRoundCorner(50);  
   combiner.addRectangleElement(0,0,300,500).setBorderSize(300)  
         /*设置颜色*/  
         .setColor(255,255,255)  
         /*设置纵向渐变*/  
         .setGradient(Color.WHITE,new Color(2, 54, 144),0,500, GradientDirection.TopBottom);  
  
   combiner.addImageElement(pathImage("qrcode.png"),0,30).setCenter(true)  
         /*宽高和圆角大小一样时,即为圆形.*/  
         .setWidth(530).setRoundCorner(530);  
  
   combiner.addRectangleElement(0,320,250,150).setColor(255,255,255).setCenter(true).setBorderSize(5).setRoundCorner(30);  
   combiner.addTextElement("ImageCombiner是一个专门用于Java服务端图片合成的工具,简单实用!","楷体",Font.BOLD|Font.ITALIC,25,0,330)  
         /*设置最大宽度自动换行*/  
         .setAutoBreakLine(240)  
         .setColor(new Color(255,255,255))  
         .setCenter(true);  
  
   combiner.combine();  
   combiner.save("G://图片/scene3.png");  
}
  • 效果相当不错:

场景4.图片水印效果

  • 对背景图片添加图片和文本水印:
/**  
 * 图片水印效果  
 */  
@Test  
void scene4() throws Exception{  
   ImageCombiner combiner = new ImageCombiner(pathImage("bg1.png"), OutputFormat.PNG);  
   String watermark=pathImage("java.png");  
   String watermarkText="Java合并图片";  
  
   /*添加图片水印*/  
   combiner.addImageElement(watermark, 50, 50, 100, 0, ZoomMode.Width)  
         .setAlpha(0.7F)  
         .setRotate(10)  
         .setRoundCorner(20)  
         /*重复绘制-平铺效果*/  
         .setRepeat(true, 100, 80);  
   /*添加文本水印*/  
   combiner.addTextElement(watermarkText, 20, 100, 100)  
         /*字间距*/  
         .setSpace(0.1F)  
         .setAlpha(0.7F)  
         .setColor(Color.WHITE)  
         .setRotate(-20)  
         /*重复绘制-平铺效果*/  
         .setRepeat(true, 120, 50);  
  
   combiner.combine();  
   combiner.save("G://图片/scene4.png");  
}
  • 效果图如下:

N+场景. 相信你可以发现更多!

  • 小技巧1
    设置自动换行时,将宽度设置为0,即可实现竖向排列文本.
  • 小技巧2
    图像圆角大小设置为大于或等于宽高,即可实现圆形绘制.
  • 小技巧3
    TextElement#setAutoFitWidth设置文本内容自适应最大宽度,自动缩放字体.

回顾

ImageCombiner 当真是小身板大能量,自从用了它,系统中的各种图片需求都能轻松应对.
最常用的场景就是UI给出背景图,直接叠加海报文本,
每天不重样,天天有惊喜,客户喜欢,老板高兴,工作愉快!
感谢大神开源,支持开源!

更多Java知识,Spring Boot知识,实用干货,点击关注,持续更新!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表