失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java实现图片合成功能 两张图片合成一张

java实现图片合成功能 两张图片合成一张

时间:2021-09-18 15:55:37

相关推荐

java实现图片合成功能 两张图片合成一张

首先弄两张图片,如下:

将这两张图片合成一张图片到本地,代码如下:

package org.example.test;import javax.imageio.ImageIO;import java.awt.*;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;/*** 把两张图片合并一张*/public class Picture {/*** 压缩图片*/private static BufferedImage resize(BufferedImage source, int targetW, int targetH) {// targetW,targetH分别表示目标长和宽int type = source.getType();BufferedImage target = null;int width = source.getWidth();int height = source.getHeight();double sx = (double) targetW / width;double sy = (double) targetH / height;// 这里想实现在targetW,targetH范围内实现等比缩放if (sx > sy) {sx = sy;targetW = (int) (sx * source.getWidth());} else {sy = sx;targetH = (int) (sy * source.getHeight());}if (type == BufferedImage.TYPE_CUSTOM) {ColorModel cm = source.getColorModel();WritableRaster raster = cm.createCompatibleWritableRaster(targetW,targetH);boolean alphaPremultiplied = cm.isAlphaPremultiplied();target = new BufferedImage(cm, raster, alphaPremultiplied, null);} else {target = new BufferedImage(targetW, targetH, type);}Graphics2D g = target.createGraphics();// smoother than exlax:g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));g.dispose();return target;}/*** 待合并的两张张图必须满足这样的前提,如果水平方向合并,则高度必须相等;如果是垂直方向合并,宽度必须相等。** @param img1 待合并的第一张图* @param img2 带合并的第二张图* @return 返回合并后的BufferedImage对象*/private static BufferedImage mergeImage(BufferedImage img1, BufferedImage img2) {int w1 = img1.getWidth();int h1 = img1.getHeight();int w2 = img2.getWidth();Graphics2D graphics2D = null;// 生成新图片BufferedImage destImage = null;destImage = new BufferedImage(w1 + w2, h1, BufferedImage.TYPE_INT_RGB);graphics2D = destImage.createGraphics();graphics2D.drawImage(img1, 0, 0, w1, h1, null);graphics2D.drawImage(img2, w1, 0, w2, h1, null);graphics2D.dispose();return destImage;}/*** 生成新图片到本地*/public static void writeImageLocal(String newImage, BufferedImage img) {if (newImage != null && img != null) {try {File outputfile = new File(newImage);ImageIO.write(img, "jpg", outputfile);} catch (IOException e) {System.out.println(e.getMessage());}}}public static void main(String[] args) throws Exception {InputStream is1 = new FileInputStream("D:\\photo\\01_皖R6982_202639_1636A_77_60_1.jpg");InputStream is2 = new FileInputStream("D:\\photo\\01_皖R6982_202639_1636A_77_60_2.jpg");BufferedImage readImg1 = ImageIO.read(is1);BufferedImage readImg2 = ImageIO.read(is2);// 图像压缩 保证每张图片大小一致int width = readImg1.getWidth();int height = readImg1.getHeight();readImg2 = resize(readImg2, width, height);BufferedImage mergeImg = mergeImage(readImg1, readImg2);writeImageLocal("D:\\photo\\new.jpg", mergeImg);}}

成功合成一张图片,结果如下:

如果觉得《java实现图片合成功能 两张图片合成一张》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。