这篇文章,主要介绍如何使用Java实现两张图片合并成一张图片的功能。

目录

一、Java合并图片

1.1、实现效果

1.2、代码实现


一、Java合并图片

图片合并工具类可以实现的功能:

  • 垂直合并两个图片,水平合并两个图片(PS:可以推广到多个图片的合并)。
  • 设置合并的图片是否居中显示。
  • 设置合并图片的背景颜色,透明背景。
  • 设置合并图片的间隙。
  • 合并之后的图片输出成一个图片文件。
  • 合并之后的图片转换成base64编码字符串。

1.1、实现效果

  • 水平合并,背景颜色透明的效果如下所示:

  • 垂直合并,背景颜色自定义的效果如下所示:

下面看下具体的实现代码。

1.2、代码实现

package jdk;import sun.awt.image.BufferedImageGraphicsConfig;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;/*** @version 1.0.0* @Date: 2022/10/19 12:15* @Author ZhuYouBin* @Description 图片合并工具类*/
public final class MergeImageUtil {private static class ImageType {private static final String DEFAULT_NAME = "image";private static final String PNG = "png";private static final String BASE64_PREFIX = "data:image/png;base64,";}/*** 将两个图片合并成一个图片【垂直合并】* @param first 图片1文件路径* @param second 图片2文件路径* @return 返回合并之后的图片*/public static BufferedImage mergeImage(String first, String second) throws IOException {FileInputStream img1 = new FileInputStream(first);FileInputStream img2 = new FileInputStream(second);BufferedImage image01 = ImageIO.read(img1);BufferedImage image02 = ImageIO.read(img2);return mergeImage(image01, image02, false);}/*** 将两个图片合并成一个图片【垂直合并】* @param first 图片1* @param second 图片2* @return 返回合并之后的图片*/public static BufferedImage mergeImage(BufferedImage first, BufferedImage second) {return mergeImage(first, second, false);}/*** 合并两个图片* @param first 图片1* @param second 图片2* @param horizontal 等于true,则两个图片水平合并显示, 否则两个图片垂直合并显示* @return 返回合并之后的图片*/public static BufferedImage mergeImage(BufferedImage first, BufferedImage second, boolean horizontal) {return mergeImage(first, second, horizontal, 0);}/*** 合并两个图片* @param first 图片1* @param second 图片2* @param horizontal 等于true,则两个图片水平合并显示, 否则两个图片垂直合并显示* @param gap 图片之间的间距* @return 返回合并之后的图片*/public static BufferedImage mergeImage(BufferedImage first, BufferedImage second, boolean horizontal, int gap) {return mergeImage(first, second, horizontal, false, gap);}/*** 合并两个图片* @param first 图片1* @param second 图片2* @param horizontal 等于true,则两个图片水平合并显示, 否则两个图片垂直合并显示* @param center 图片是否水平居中, horizontal 等于 false 垂直合并才有效* @param gap 图片之间的间距* @return 返回合并之后的图片*/public static BufferedImage mergeImage(BufferedImage first, BufferedImage second, boolean horizontal, boolean center, int gap) {return mergeImage(first, second, horizontal, center, false, gap, null);}/*** 合并两个图片* @param first 图片1* @param second 图片2* @param horizontal 等于true,则两个图片水平合并显示, 否则两个图片垂直合并显示* @param center 图片是否水平居中, horizontal 等于 false 垂直合并才有效* @param transparent 合并后的图片背景是否透明色* @param gap 图片之间的间距* @param color 图片的背景颜色* @return 返回合并之后的图片*/public static BufferedImage mergeImage(BufferedImage first, BufferedImage second, boolean horizontal, boolean center, boolean transparent, int gap, Color color) {if (first == null) {return second;} else if (second == null) {return first;}// 获取原始图片宽度int firstWidth = first.getWidth();int firstHeight = first.getHeight();int secondWidth = second.getWidth();int secondHeight = second.getHeight();int picGap = gap * 2;// 合并后的图片宽高int mergeWidth = Math.max(firstWidth, secondWidth) + picGap;int mergeHeight = firstHeight + secondHeight + picGap;if (horizontal) {mergeWidth = firstWidth + secondWidth + picGap;mergeHeight = Math.max(firstHeight, secondHeight) + picGap;}// 创建目标图片对象BufferedImage target = new BufferedImage(mergeWidth, mergeHeight, BufferedImage.TYPE_INT_RGB);if (transparent) {// 设置图片背景为透明的BufferedImageGraphicsConfig config = BufferedImageGraphicsConfig.getConfig(target);target = config.createCompatibleImage(mergeWidth, mergeHeight, Transparency.TRANSLUCENT);}// 创建绘制目标图片对象Graphics2D graphics = target.createGraphics();int x1, y1;int x2, y2;if (horizontal) {// 水平合并x1 = gap;y1 = gap;x2 = firstWidth + gap;y2 = gap;} else {// 垂直合并if (center) {// 计算居中位置x1 = (mergeWidth - firstWidth) / 2;x2 = (mergeWidth - secondWidth) / 2;} else {x1 = gap;x2 = gap;}y1 = gap;y2 = firstHeight + gap;}// 图片的背景颜色if (color != null) {graphics.setColor(color);graphics.fillRect(0, 0, mergeWidth, mergeHeight);}// 按照顺序绘制图片graphics.drawImage(first, x1, y1, firstWidth, firstHeight, null);graphics.drawImage(second, x2, y2, secondWidth, secondHeight, null);graphics.dispose();// 返回合并后的图片对象return target;}/*** 保存合并后的图片到文件* @param fileName 文件路径名称* @param image 图片*/public static void writeToFile(String fileName, BufferedImage image) throws IOException {if (fileName == null) {fileName = ImageType.DEFAULT_NAME;}File file = new File(fileName);// 保存图片ImageIO.write(image, ImageType.PNG, file);}/*** 图片转换成 Base64 编码字符串* @param image 图片* @return 返回转换之后的 base64 编码字符串*/public static String writeToBase64(BufferedImage image) throws IOException {ByteArrayOutputStream bos = new ByteArrayOutputStream();// 将图片写入字节输出流里面ImageIO.write(image, ImageType.PNG, bos);// 字节输出流转换成字节数组byte[] bytes = bos.toByteArray();BASE64Encoder encoder = new BASE64Encoder();String base64 = encoder.encodeBuffer(bytes).trim();// 将字符串中的所有【\n】、【\r】删除base64 = base64.replaceAll("\n", "").replaceAll("\r", "");// 返回 base64 编码字符串return ImageType.BASE64_PREFIX + base64;}/** ====================================================================================================== */public static void main(String[] args) throws Exception {FileInputStream img1 = new FileInputStream("D:\\demo\\001.jpg");FileInputStream img2 = new FileInputStream("D:\\demo\\002.png");BufferedImage image01 = ImageIO.read(img1);BufferedImage image02 = ImageIO.read(img2);// 合并两个图片,背景不透明BufferedImage target = mergeImage(image01, image02, false, true, false, 0, Color.PINK);writeToFile("D:\\demo\\003.jpg", target);System.out.println("合并成功......");// 合并两个图片,背景透明target = mergeImage(image01, image02, true, true, true, 20, null);writeToFile("D:\\demo\\004.jpg", target);System.out.println("合并成功......");}
}

综上,这篇文章结束了,主要介绍如何使用Java实现两张图片合并成一张图片的功能。

【Java合并图片】使用Java实现两张图片合并成一张图片的功能(水平合并、垂直合并、透明背景颜色)相关推荐

  1. 在电脑上图片过长,但是要截成一张图片,解决方案

    在电脑上图片过长,但是要截成一张图片,应该怎么解决 - 正如这张图片,我们很难截成长的,但是我们把图片横着不久行了嘛 transform:rotate(90deg); height:205% marg ...

  2. Aspose.Words for .NET使用表格教程之水平和垂直合并表格中单元格

    Aspose.Words For .Net是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...

  3. 无需下载软件怎么将多张图片组合成一张图片

    如今有很多的图片制作及编辑工具,比如美图秀秀和PS软件就是常见的可以编辑图片的软件,但是都需要安装下载,今天小编带来了一个免费图片编辑的网站,无须下载就可以将多张图片组合成一张图片,那怎么操作呢,一起 ...

  4. java 将图片分割成9张_将多张图片合并成一张,代码(可垂直和水平方向合并)...

    importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio. ...

  5. java 判断图片合适,Java 判断图片色彩

    package cardshibie; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOut ...

  6. ImageMagick将多张图片拼接成一张图片_如何将多张图片排列在一张图片呢?学会这两种技巧,轻松搞定...

    摄影爱好者平时拍照完后,都很喜欢把自己的图片都排列在一张图片里,便于欣赏,在PS中排列方法有很多,本文详细介绍两种比较实用又好看的排列方法,一种是将两张图片并排在一起,另外一种是将4张图片放在一起. ...

  7. ImageMagick将多张图片拼接成一张图片_怎么免费把图片转成PDF?教你4种实用方法...

    日常我们经常会使用手机或截屏等快速将资料以图片进行保存,但毕竟图片要一张一张翻看比较麻烦,所以一般会将图片转成PDF使用,其实图片生成PDF非常简单,分享4种好用的方法. 方法1: 最简单的方法就是新 ...

  8. python之实现两张图片拼接成一张图片(水平方向)(亲测可用)

    效果: # 作者:萧海 # 联系: 1283679 # application:版权拥有 侵权必究 # @time: 6/20/2023 3:15 PMfrom PIL import Image #两 ...

  9. ImageMagick将多张图片拼接成一张图片_高逼格九宫格图片,2020年朋友圈图片,自己做不求人...

    元旦快乐!! 2019年过去了,2020年你的计划里不知道还有没有2018年的待完成事项呢?(拖延症的话,经常是拖着拖着就没了吧= =)无论如何在许下愿望列下清单的那一刻我们也是斗志满分阿! 今天给大 ...

  10. 将两张图片拼接成一张图片

    两张原图如下: 图片1: 图片2: 将两张原图拖动到PhotoShop中: 选取移动工具,选中图片1,将其图层解锁: 通过点击图像->画布大小调整画布的大小: 调整图层1的位置,然后将图层2拖动 ...

最新文章

  1. iOS开发--Mac下server搭建
  2. Dumpzilla工具第615行bug的解决办法
  3. Android实战:手把手实现“捧腹网”APP(三)-----UI实现,逻辑实现
  4. 如何在STS中创建Spring Boot项目
  5. Django 数据库建表的时候 No migrations to apply原因出现和解决
  6. statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
  7. sql视图 权限_SQLmysql用户权限管理
  8. 【转】01背包问题动态规划详解
  9. Oracle使用技巧及PL/SQL Developer配置
  10. ActivityGroup简介1
  11. Linux:configure: error: OpenSSL libcrypto not found
  12. 施耐德电气技术文档集
  13. 最好用的卸载软件工具(Your Uninstaller! PRO)
  14. 服务器系统2003资源监视器在哪里,Win10资源监视器在哪 如何打开资源监视器
  15. 论文阅读:普适边缘计算环境下的区块链资源分配与共识
  16. 怎么预防服务器的常见攻击
  17. 云南人,你的家乡在哪里?
  18. 英雄联盟服务器维护时间是多久,英雄联盟更新维护到几点今天? LOL10月15日停机维护多久几点开服...
  19. 两个瓶子水怎样一样多_大班科学领域数学活动 | 一样多的水(容积守恒)
  20. 微软的“胡萝卜”会比“大棒”更有效吗

热门文章

  1. 支付宝第三方登录集成文档
  2. CRMEB 知识付费模版消息修改教程
  3. speedoffice(Word)文档中如何插入图片
  4. 青果教务管理系统存储型XSS 一枚
  5. php 连接局域网打印机,如何添加局域网打印机?局域网打印机添加方法介绍
  6. 分布式系统如何保证数据一致性
  7. 常用的公共 DNS 服务器 IP 地址
  8. cif t t操作流程图_操作示例:T/T+CIF+海运
  9. 用php打印出日历_php简单日历实现程序代码
  10. Mac好用的截图工具:Snipaste