Преглед на файлове

更新内容:1. 新增date_dir字段;2. 新增小票合并链接,存放在audit_trip_result->merge_img_url;

alibct преди 2 години
родител
ревизия
6945fe373c
променени са 1 файла, в които са добавени 98 реда и са изтрити 0 реда
  1. 98 0
      src/main/java/com/pavis/ctr/audit/common/utils/ImageUtils.java

+ 98 - 0
src/main/java/com/pavis/ctr/audit/common/utils/ImageUtils.java

@@ -0,0 +1,98 @@
+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 "";
+        }
+    }
+}