1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package com.pavis.ctr.audit.common.utils;
- import com.baidubce.services.bos.BosClient;
- import org.apache.commons.lang3.StringUtils;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.net.URL;
- /**
- * @author semi
- * @create 2023-05-15 14:21
- */
- public class ImageUtils {
- /**
- * 合并任数量的图片成一张图片
- *
- * @param isHorizontal true代表水平合并,fasle代表垂直合并
- * @param imgs 待合并的图片数组
- * @return
- * @throws IOException
- */
- public static BufferedImage mergeImage(boolean isHorizontal, BufferedImage[] imgs) throws IOException {
- // 生成新图片
- BufferedImage destImage = null;
- // 计算新图片的长和高
- int allw = 0, allh = 0, allwMax = 0, allhMax = 0;
- // 获取总长、总宽、最长、最宽
- for (int i = 0; i < imgs.length; i++) {
- BufferedImage img = imgs[i];
- allw += img.getWidth();
- allh += img.getHeight();
- if (img.getWidth() > allwMax) {
- allwMax = img.getWidth();
- }
- if (img.getHeight() > allhMax) {
- allhMax = img.getHeight();
- }
- }
- // 创建新图片
- if (isHorizontal) {
- destImage = new BufferedImage(allw, allhMax, BufferedImage.TYPE_INT_RGB);
- } else {
- destImage = new BufferedImage(allwMax, allh, BufferedImage.TYPE_INT_RGB);
- }
- // 合并所有子图片到新图片
- int wx = 0, wy = 0;
- for (int i = 0; i < imgs.length; i++) {
- BufferedImage img = imgs[i];
- int w1 = img.getWidth();
- int h1 = img.getHeight();
- // 从图片中读取RGB
- int[] ImageArrayOne = new int[w1 * h1];
- ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中
- if (isHorizontal) { // 水平方向合并
- destImage.setRGB(wx, 0, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB
- } else { // 垂直方向合并
- destImage.setRGB(0, wy, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB
- }
- wx += w1;
- wy += h1;
- }
- return destImage;
- }
- /**
- * 纵向拼接一组(多张)图像
- *
- * @param pics 将要拼接的图像数组
- * @param type 写入图像类型
- * @param dstPic 写入图像路径
- * @return
- */
- public static String joinImageListVertical(String[] pics, String type, String dstPic, BosClient client) {
- try {
- int len = pics.length;
- if (len == 1) {
- return pics[0];
- }
- BufferedImage[] images = new BufferedImage[len];
- for (int i = 0; i < len; i++) {
- images[i] = ImageIO.read(new URL(pics[i]));
- }
- BufferedImage dstImg = mergeImage(false, images);
- File file = new File(dstPic);
- ImageIO.write(dstImg, type, file);
- // 上传至bos
- return BosUtils.putByName(client, StringUtils.substringAfterLast(dstPic, "/"), file);
- } catch (IOException e) {
- e.printStackTrace();
- return "";
- }
- }
- }
|