zoukankan      html  css  js  c++  java
  • stream、base64、bytes、BufferedImage、Mat对象的相互转换工具类

      1 package com.sxh.ocr.provider.common.util;
      2 
      3 import org.apache.poi.util.IOUtils;
      4 import org.opencv.core.CvType;
      5 import org.opencv.core.Mat;
      6 import org.opencv.core.MatOfByte;
      7 import org.opencv.imgcodecs.Imgcodecs;
      8 import org.springframework.util.Base64Utils;
      9 import sun.misc.BASE64Decoder;
     10 
     11 import javax.imageio.ImageIO;
     12 import java.awt.*;
     13 import java.awt.image.BufferedImage;
     14 import java.awt.image.DataBufferByte;
     15 import java.io.ByteArrayInputStream;
     16 import java.io.IOException;
     17 import java.io.InputStream;
     18 
     19 /**
     20  * 流处理工具
     21  *
     22  * @author simm
     23  */
     24 public class MyStreamUtils {
     25     /**
     26      * 转换成base64编码
     27      *
     28      * @param inputStream
     29      * @return
     30      * @throws IOException
     31      */
     32     public static String streamToBase64(InputStream inputStream) throws IOException {
     33         return Base64Utils.encodeToString(IOUtils.toByteArray(inputStream));
     34     }
     35 
     36     /**
     37      * 装换回编码
     38      *
     39      * @param correctMat
     40      * @return
     41      */
     42     public static String catToBase64(Mat correctMat) {
     43         return bufferToBase64(toByteArray(correctMat));
     44     }
     45 
     46     /**
     47      * 转换成base64编码
     48      *
     49      * @param buffer
     50      * @return
     51      */
     52     public static String bufferToBase64(byte[] buffer) {
     53         return Base64Utils.encodeToString(buffer);
     54     }
     55 
     56     /**
     57      * base64编码转换成字节数组
     58      *
     59      * @param base64Str
     60      * @return
     61      */
     62     public static byte[] base64ToByteArray(String base64Str) {
     63         return Base64Utils.decodeFromString(base64Str);
     64     }
     65 
     66     /**
     67      * base64 编码转换为 BufferedImage
     68      *
     69      * @param base64
     70      * @return
     71      */
     72     public static BufferedImage base64ToBufferedImage(String base64) {
     73         BASE64Decoder decoder = new sun.misc.BASE64Decoder();
     74         try {
     75             byte[] bytes1 = decoder.decodeBuffer(base64);
     76             ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
     77             return ImageIO.read(bais);
     78         } catch (IOException e) {
     79             e.printStackTrace();
     80         }
     81         return null;
     82     }
     83 
     84     /**
     85      * mat转换成bufferedImage
     86      *
     87      * @param matrix
     88      * @return
     89      */
     90     public static byte[] toByteArray(Mat matrix) {
     91         MatOfByte mob = new MatOfByte();
     92         Imgcodecs.imencode(".jpg", matrix, mob);
     93         return mob.toArray();
     94     }
     95 
     96     /**
     97      * mat转换成bufferedImage
     98      *
     99      * @param matrix
    100      * @return
    101      */
    102     public static BufferedImage toBufferedImage(Mat matrix) throws IOException {
    103         byte[] buffer = toByteArray(matrix);
    104         ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
    105         return ImageIO.read(bais);
    106     }
    107 
    108     /**
    109      * base64转Mat
    110      *
    111      * @param base64
    112      * @return
    113      * @throws IOException
    114      */
    115     public static Mat base642Mat(String base64) throws IOException {
    116 
    117         return bufImg2Mat(base64ToBufferedImage(base64), BufferedImage.TYPE_3BYTE_BGR, CvType.CV_8UC3);
    118     }
    119 
    120     /**
    121      * BufferedImage转换成Mat
    122      *
    123      * @param original 要转换的BufferedImage
    124      * @param imgType  bufferedImage的类型 如 BufferedImage.TYPE_3BYTE_BGR
    125      * @param matType  转换成mat的type 如 CvType.CV_8UC3
    126      */
    127     public static Mat bufImg2Mat(BufferedImage original, int imgType, int matType) {
    128         if (original == null) {
    129             throw new IllegalArgumentException("original == null");
    130         }
    131         // Don't convert if it already has correct type
    132         if (original.getType() != imgType) {
    133             // Create a buffered image
    134             BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), imgType);
    135             // Draw the image onto the new buffer
    136             Graphics2D g = image.createGraphics();
    137             try {
    138                 g.setComposite(AlphaComposite.Src);
    139                 g.drawImage(original, 0, 0, null);
    140                 original = image;
    141             }catch (Exception e){
    142                 e.printStackTrace();
    143             }finally {
    144                 g.dispose();
    145             }
    146         }
    147         byte[] pixels = ((DataBufferByte) original.getRaster().getDataBuffer()).getData();
    148         Mat mat = Mat.eye(original.getHeight(), original.getWidth(), matType);
    149         mat.put(0, 0, pixels);
    150         return mat;
    151     }
    152 }

     项目地址:https://github.com/git-simm/simm-framework

  • 相关阅读:
    chrome设置中显示“由贵单位管理”的解决办法
    使用Record Espresso test脚本录制功能
    win10启动.net framework 3.5失败的解决办法
    Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExceptio解决办法
    Python+Selenium学习--自动化测试用例实例
    linux之awk命令(转载)
    linux之shell1
    linux之egrep命令
    linux之grep命令
    python3安装pcap遇到的问题
  • 原文地址:https://www.cnblogs.com/MrSi/p/13652708.html
Copyright © 2011-2022 走看看