【Java合并图片】使用Java实现两张图片合并成一张图片的功能(水平合并、垂直合并、透明背景颜色)
这篇文章,主要介绍如何使用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实现两张图片合并成一张图片的功能(水平合并、垂直合并、透明背景颜色)相关推荐
- 在电脑上图片过长,但是要截成一张图片,解决方案
在电脑上图片过长,但是要截成一张图片,应该怎么解决 - 正如这张图片,我们很难截成长的,但是我们把图片横着不久行了嘛 transform:rotate(90deg); height:205% marg ...
- Aspose.Words for .NET使用表格教程之水平和垂直合并表格中单元格
Aspose.Words For .Net是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...
- 无需下载软件怎么将多张图片组合成一张图片
如今有很多的图片制作及编辑工具,比如美图秀秀和PS软件就是常见的可以编辑图片的软件,但是都需要安装下载,今天小编带来了一个免费图片编辑的网站,无须下载就可以将多张图片组合成一张图片,那怎么操作呢,一起 ...
- java 将图片分割成9张_将多张图片合并成一张,代码(可垂直和水平方向合并)...
importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio. ...
- java 判断图片合适,Java 判断图片色彩
package cardshibie; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOut ...
- ImageMagick将多张图片拼接成一张图片_如何将多张图片排列在一张图片呢?学会这两种技巧,轻松搞定...
摄影爱好者平时拍照完后,都很喜欢把自己的图片都排列在一张图片里,便于欣赏,在PS中排列方法有很多,本文详细介绍两种比较实用又好看的排列方法,一种是将两张图片并排在一起,另外一种是将4张图片放在一起. ...
- ImageMagick将多张图片拼接成一张图片_怎么免费把图片转成PDF?教你4种实用方法...
日常我们经常会使用手机或截屏等快速将资料以图片进行保存,但毕竟图片要一张一张翻看比较麻烦,所以一般会将图片转成PDF使用,其实图片生成PDF非常简单,分享4种好用的方法. 方法1: 最简单的方法就是新 ...
- python之实现两张图片拼接成一张图片(水平方向)(亲测可用)
效果: # 作者:萧海 # 联系: 1283679 # application:版权拥有 侵权必究 # @time: 6/20/2023 3:15 PMfrom PIL import Image #两 ...
- ImageMagick将多张图片拼接成一张图片_高逼格九宫格图片,2020年朋友圈图片,自己做不求人...
元旦快乐!! 2019年过去了,2020年你的计划里不知道还有没有2018年的待完成事项呢?(拖延症的话,经常是拖着拖着就没了吧= =)无论如何在许下愿望列下清单的那一刻我们也是斗志满分阿! 今天给大 ...
- 将两张图片拼接成一张图片
两张原图如下: 图片1: 图片2: 将两张原图拖动到PhotoShop中: 选取移动工具,选中图片1,将其图层解锁: 通过点击图像->画布大小调整画布的大小: 调整图层1的位置,然后将图层2拖动 ...
最新文章
- iOS开发--Mac下server搭建
- Dumpzilla工具第615行bug的解决办法
- Android实战:手把手实现“捧腹网”APP(三)-----UI实现,逻辑实现
- 如何在STS中创建Spring Boot项目
- Django 数据库建表的时候 No migrations to apply原因出现和解决
- statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
- sql视图 权限_SQLmysql用户权限管理
- 【转】01背包问题动态规划详解
- Oracle使用技巧及PL/SQL Developer配置
- ActivityGroup简介1
- Linux:configure: error: OpenSSL libcrypto not found
- 施耐德电气技术文档集
- 最好用的卸载软件工具(Your Uninstaller! PRO)
- 服务器系统2003资源监视器在哪里,Win10资源监视器在哪 如何打开资源监视器
- 论文阅读:普适边缘计算环境下的区块链资源分配与共识
- 怎么预防服务器的常见攻击
- 云南人,你的家乡在哪里?
- 英雄联盟服务器维护时间是多久,英雄联盟更新维护到几点今天? LOL10月15日停机维护多久几点开服...
- 两个瓶子水怎样一样多_大班科学领域数学活动 | 一样多的水(容积守恒)
- 微软的“胡萝卜”会比“大棒”更有效吗