300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 多张图片合成一张图片

多张图片合成一张图片

时间:2023-11-07 17:59:06

相关推荐

多张图片合成一张图片

话不多说直接上代码

package com.springboot.demo.utils;import sun.misc.BASE64Decoder;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.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.** @Auther: cqwuliu* @Date: /04/24/16:44 will_isme@* @Description:*/public class Imgs_To_img {/*** 压缩图片*/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;}private static BufferedImage mergeImage_3(BufferedImage img1, BufferedImage img2,BufferedImage img3) {int w1 = img1.getWidth();int h1 = img1.getHeight();int h2 = img2.getHeight();int h3 = img3.getHeight();Graphics2D graphics2D = null;// 生成新图片BufferedImage destImage = null;destImage = new BufferedImage(w1 , h1+h2+h3, BufferedImage.TYPE_INT_RGB);graphics2D = destImage.createGraphics();graphics2D.drawImage(img1, 0, 0, w1, h1, null);graphics2D.drawImage(img2, 0, h1, w1, h2, null);graphics2D.drawImage(img3, 0, h1+h2, w1, h3, 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());}}}private static InputStream getStringToInputStream(String base64FileData) throws IOException {BASE64Decoder decoder = new BASE64Decoder();// Base64解码byte[] byteArr = decoder.decodeBuffer(base64FileData);InputStream inputStream = new ByteArrayInputStream(byteArr);return inputStream;}public static InputStream bufferedImageToInputStream(BufferedImage image){ByteArrayOutputStream os = new ByteArrayOutputStream();try {ImageIO.write(image, "png", os);InputStream input = new ByteArrayInputStream(os.toByteArray());return input;} catch (IOException e) {System.err.println("提示:"+e);new RuntimeException("人脸识别图片上传出现异常未上传成功数据");}return null;}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");String s1="";String s2="";String s3="";InputStream is1;InputStream is2;InputStream is3;if(false){Scanner scanner=new Scanner(System.in);s1 = scanner.next();s2 = scanner.next();s3 = scanner.next();scanner.close();is1=getStringToInputStream(s1);is2=getStringToInputStream(s2);is3=getStringToInputStream(s3);}else{is1 = new FileInputStream("D:\\jal\\rawdata.jpg");is2 = new FileInputStream("D:\\jal\\face.jpg");is3 = new FileInputStream("D:\\jal\\idcard.jpg");}BufferedImage readImg1 = ImageIO.read(is1);BufferedImage readImg2 = ImageIO.read(is2);BufferedImage readImg3 = ImageIO.read(is3);// 图像压缩 保证每张图片大小一致int width = readImg1.getWidth();int height = readImg1.getHeight();readImg2 = resize(readImg2, width, height);readImg3 = resize(readImg3, width, height);BufferedImage mergeImg = mergeImage_3(readImg1, readImg2,readImg3);writeImageLocal("D:\\new.jpg", mergeImg);}public static BufferedImage getPicturen(String s1,String s2,String s3) throws IOException {InputStream is1=getStringToInputStream(s1);InputStream is2=getStringToInputStream(s2);InputStream is3=getStringToInputStream(s3);BufferedImage readImg1 = ImageIO.read(is1);BufferedImage readImg2 = ImageIO.read(is2);BufferedImage readImg3 = ImageIO.read(is3);// 图像压缩 保证每张图片大小一致int width = readImg1.getWidth();int height = readImg1.getHeight();readImg2 = resize(readImg2, width, height);readImg3 = resize(readImg3, width, height);BufferedImage mergeImg = mergeImage_3(readImg1, readImg2,readImg3);return mergeImg;}}

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