package test.utils;

import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException;

import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; import javax.imageio.ImageIO;

import org.apache.commons.codec.binary.Base64;

import com.fintech.third.model.ThirdProperties;

public class Base64Util {

private static final char[] intToBase64 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
        'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
        '4', '5', '6', '7', '8', '9', '+', '/' };

private static final char[] intToAltBase64 = { '!', '"', '#', '$', '%', '&', '\'', '(', ')', ',', '-', '.', ':',
        ';', '<', '>', '@', '[', ']', '^', '`', '_', '{', '|', '}', '~', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
        'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2',
        '3', '4', '5', '6', '7', '8', '9', '+', '?' };

private static final byte[] base64ToInt = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1,
        -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8,
        9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,
        30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 };

private static final byte[] altBase64ToInt = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, 62, 9, 10,
        11, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 12, 13, 14, -1, 15, 63, 16, -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17, -1, 18, 19, 21, 20, 26, 27, 28,
        29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 22, 23, 24,
        25 };


// 将 s 进行 BASE64 编码
public static String getBASE64(String s) throws UnsupportedEncodingException {
    if (s == null)
        return null;
    return new BASE64Encoder().encode(s.getBytes("UTF-8"));
}

// 将 字符串进行 BASE64 编码
public static String getBASE64ByCodec(String s) {
    Base64 b64 = new Base64();
    return b64.encodeToString(s.getBytes());
}

public static String getBASE64ByByte(byte[] by) {
    Base64 b64 = new Base64();
    return b64.encodeToString(by);
}

public static byte[] getFromBASE64(String s) {
    if (s == null)
        return null;
    BASE64Decoder decoder = new BASE64Decoder();
    byte[] b = null;
    try {
        b = decoder.decodeBuffer(s);

    } catch (Exception e) {
        return null;
    }
    return b;
}

// 将 BASE64 编码的字符串 s 进行解码
public static String getFromBASE64Str(String s) throws IOException {
    return new String(new BASE64Decoder().decodeBuffer(s), "UTF-8");
}

// 图片转化成base64字符串
public static String getImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    InputStream in = null;
    byte[] data = null;
    // 读取图片字节数组
    try {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 对字节数组Base64编码
    BASE64Encoder encoder = new BASE64Encoder();
    return new String(encoder.encode(data));// 返回Base64编码过的字节数组字符串
}

// base64字符串转化成图片
public static String generateImage(String imgStr, String fileName, String filePath) { // 对字节数组字符串进行Base64解码并生成图片
    if (imgStr == null) // 图像数据为空
        return null;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
        // Base64解码
        byte[] b = decoder.decodeBuffer(imgStr);
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {// 调整异常数据
                b[i] += 256;
            }
        }
        // 生成jpeg图片
        String imgFilePath = filePath + fileName + ".jpg";// 新生成的图片
        OutputStream out = new FileOutputStream(imgFilePath);
        out.write(b);
        out.flush();
        out.close();
    //    resizeImage(imgFilePath, 300, 300);
        return imgFilePath;
    } catch (Exception e) {
        return null;
    }
}

// 图片转化成base64字符串
public static String getImageStrByCodec(String imgFile) throws IOException {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    Base64 b64 = new Base64();
    File file = new File(imgFile);
    FileInputStream fis = new FileInputStream(file);
    byte[] buffer = new byte[(int) file.length()];
    fis.read(buffer);
    fis.close();
    return b64.encodeToString(buffer);
}

// base64字符串转化成图片
public static String generateImageByCodec(String imgStr, String fileName) throws IOException { // 对字节数组字符串进行Base64解码并生成图片
    ThirdProperties thirdProperties = ThirdPropertiesInitUtil.getThirdProperties();
    Base64 b64 = new Base64();
    byte[] buffer = b64.decode(imgStr);

    // 生成jpeg图片
    String imgFilePath = SystemUtil.class.getResource(thirdProperties.getImage_path()).getPath() + fileName;// 新生成的图片
    OutputStream out = new FileOutputStream(imgFilePath);
    out.write(buffer);
    out.flush();
    out.close();
    resizeImage(imgFilePath, 300, 300);
    return imgFilePath;

}

// base64字符串转化成图片
public static void generateImageByCodec2(String imgStr, String file) throws IOException { // 对字节数组字符串进行Base64解码并生成图片
    Base64 b64 = new Base64();
    byte[] buffer = b64.decode(imgStr);
    OutputStream out = new FileOutputStream(file);
    out.write(buffer);
    out.flush();
    out.close();
    return;
}
    
/**
 * 压缩图片
 *
 * @param srcImgPath
 * @param width
 * @param height
 * @throws IOException
 */
public static void resizeImage(String srcImgPath, int width, int height) throws IOException {

    String subfix = "jpg";

    subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

    File srcFile = new File(srcImgPath);

    Image srcImg = ImageIO.read(srcFile);

    BufferedImage buffImg = null;

    if (subfix.equals("png")) {

        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    } else {

        buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    }

    Graphics2D graphics = buffImg.createGraphics();

    graphics.setBackground(Color.WHITE);

    graphics.setColor(Color.WHITE);

    graphics.fillRect(0, 0, width, height);

    graphics.drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

    ImageIO.write(buffImg, subfix, new File(srcImgPath));

}

public static String ioToBase64(InputStream in) throws IOException {
    String strBase64 = null;
    try {

        // in.available()返回文件的字节长度
        byte[] bytes = new byte[in.available()];
        // 将文件中的内容读入到数组中
        in.read(bytes);
        strBase64 = new BASE64Encoder().encode(bytes); // 将字节流数组转换为字符串
        in.close();
    } catch (FileNotFoundException fe) {
        fe.printStackTrace();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return strBase64;
}

static String getPDFBinary(InputStream fin) {
    BufferedInputStream bin = null;
    ByteArrayOutputStream baos = null;
    BufferedOutputStream bout = null;
    BASE64Encoder encoder = new sun.misc.BASE64Encoder();
    try {

        // 在文件输出流上安装节点流(更大效率读取)
        bin = new BufferedInputStream(fin);
        // 创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量
        baos = new ByteArrayOutputStream();
        // 创建一个新的缓冲输出流,以将数据写入指定的底层输出流
        bout = new BufferedOutputStream(baos);
        byte[] buffer = new byte[1024];
        int len = bin.read(buffer);
        while (len != -1) {
            bout.write(buffer, 0, len);
            len = bin.read(buffer);
        }
        bout.flush();
        byte[] bytes = baos.toByteArray();
        // sun公司的API
        return encoder.encodeBuffer(bytes).trim();
        // apache公司的API
        // return Base64.encodeBase64String(bytes);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fin.close();
            bin.close();
            bout.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

static void base64StringToPDF(String base64sString) {
    BufferedInputStream bin = null;
    FileOutputStream fout = null;
    BufferedOutputStream bout = null;
    BASE64Decoder decoder = new sun.misc.BASE64Decoder();
    try {
        byte[] bytes = decoder.decodeBuffer(base64sString);

        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        // 创建从底层输入流中读取数据的缓冲输入流对象
        bin = new BufferedInputStream(bais);
        File file = new File("E://test.pdf");
        // 创建到指定文件的输出流
        fout = new FileOutputStream(file);
        // 为文件输出流对接缓冲输出流对象
        bout = new BufferedOutputStream(fout);
        byte[] buffers = new byte[1024];
        int len = bin.read(buffers);
        while (len != -1) {
            bout.write(buffers, 0, len);
            len = bin.read(buffers);
        }
        // 刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
        bout.flush();

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            bin.close();
            fout.close();
            bout.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


public static String byteArrayToBase64(byte[] a)
  {
    return byteArrayToBase64(a, false);
  }

  public static String byteArrayToAltBase64(byte[] a)
  {
    return byteArrayToBase64(a, true);
  }

  private static String byteArrayToBase64(byte[] a, boolean alternate) {
    int aLen = a.length;
    int numFullGroups = aLen / 3;
    int numBytesInPartialGroup = aLen - 3 * numFullGroups;
    int resultLen = 4 * ((aLen + 2) / 3);
    StringBuffer result = new StringBuffer(resultLen);
    char[] intToAlpha = alternate ? intToAltBase64 : intToBase64;

    int inCursor = 0;
    for (int i = 0; i < numFullGroups; i++) {
      int byte0 = a[(inCursor++)] & 0xFF;
      int byte1 = a[(inCursor++)] & 0xFF;
      int byte2 = a[(inCursor++)] & 0xFF;
      result.append(intToAlpha[(byte0 >> 2)]);
      result.append(intToAlpha[(byte0 << 4 & 0x3F | byte1 >> 4)]);
      result.append(intToAlpha[(byte1 << 2 & 0x3F | byte2 >> 6)]);
      result.append(intToAlpha[(byte2 & 0x3F)]);
    }

    if (numBytesInPartialGroup != 0) {
      int byte0 = a[(inCursor++)] & 0xFF;
      result.append(intToAlpha[(byte0 >> 2)]);
      if (numBytesInPartialGroup == 1) {
        result.append(intToAlpha[(byte0 << 4 & 0x3F)]);
        result.append("==");
      }
      else {
        int byte1 = a[(inCursor++)] & 0xFF;
        result.append(intToAlpha[(byte0 << 4 & 0x3F | byte1 >> 4)]);
        result.append(intToAlpha[(byte1 << 2 & 0x3F)]);
        result.append('=');
      }

    }

    return result.toString();
  }

  public static byte[] base64ToByteArray(String s)
  {
    return base64ToByteArray(s, false);
  }

  public static byte[] altBase64ToByteArray(String s)
  {
    return base64ToByteArray(s, true);
  }

  private static byte[] base64ToByteArray(String s, boolean alternate) {
    byte[] alphaToInt = alternate ? altBase64ToInt : base64ToInt;
    int sLen = s.length();
    int numGroups = sLen / 4;
    if (4 * numGroups != sLen) {
      throw new IllegalArgumentException("String length must be a multiple of four.");
    }
    int missingBytesInLastGroup = 0;
    int numFullGroups = numGroups;
    if (sLen != 0) {
      if (s.charAt(sLen - 1) == '=') {
        missingBytesInLastGroup++;
        numFullGroups--;
      }
      if (s.charAt(sLen - 2) == '=') {
        missingBytesInLastGroup++;
      }
    }
    byte[] result = new byte[3 * numGroups - missingBytesInLastGroup];

    int inCursor = 0; int outCursor = 0;
    for (int i = 0; i < numFullGroups; i++) {
      int ch0 = base64toInt(s.charAt(inCursor++), alphaToInt);
      int ch1 = base64toInt(s.charAt(inCursor++), alphaToInt);
      int ch2 = base64toInt(s.charAt(inCursor++), alphaToInt);
      int ch3 = base64toInt(s.charAt(inCursor++), alphaToInt);
      result[(outCursor++)] = (byte)(ch0 << 2 | ch1 >> 4);
      result[(outCursor++)] = (byte)(ch1 << 4 | ch2 >> 2);
      result[(outCursor++)] = (byte)(ch2 << 6 | ch3);
    }

    if (missingBytesInLastGroup != 0) {
      int ch0 = base64toInt(s.charAt(inCursor++), alphaToInt);
      int ch1 = base64toInt(s.charAt(inCursor++), alphaToInt);
      result[(outCursor++)] = (byte)(ch0 << 2 | ch1 >> 4);

      if (missingBytesInLastGroup == 1) {
        int ch2 = base64toInt(s.charAt(inCursor++), alphaToInt);
        result[(outCursor++)] = (byte)(ch1 << 4 | ch2 >> 2);
      }

    }

    return result;
  }

  private static int base64toInt(char c, byte[] alphaToInt)
  {
    int result = alphaToInt[c];
    if (result < 0) {
      throw new IllegalArgumentException("Illegal character " + c);
    }
    return result;
  }
  
  
  
  public static void main(String[] args){
      String str="";
      try {
          String imgFile = "C:/Users/zengxs/Desktop/sfzbm.jpg";
         String imgstr =  getImageStrByCodec(imgFile);
        System.out.println(imgstr);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      System.out.println(str);
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
  • 247.
  • 248.
  • 249.
  • 250.
  • 251.
  • 252.
  • 253.
  • 254.
  • 255.
  • 256.
  • 257.
  • 258.
  • 259.
  • 260.
  • 261.
  • 262.
  • 263.
  • 264.
  • 265.
  • 266.
  • 267.
  • 268.
  • 269.
  • 270.
  • 271.
  • 272.
  • 273.
  • 274.
  • 275.
  • 276.
  • 277.
  • 278.
  • 279.
  • 280.
  • 281.
  • 282.
  • 283.
  • 284.
  • 285.
  • 286.
  • 287.
  • 288.
  • 289.
  • 290.
  • 291.
  • 292.
  • 293.
  • 294.
  • 295.
  • 296.
  • 297.
  • 298.
  • 299.
  • 300.
  • 301.
  • 302.
  • 303.
  • 304.
  • 305.
  • 306.
  • 307.
  • 308.
  • 309.
  • 310.
  • 311.
  • 312.
  • 313.
  • 314.
  • 315.
  • 316.
  • 317.
  • 318.
  • 319.
  • 320.
  • 321.
  • 322.
  • 323.
  • 324.
  • 325.
  • 326.
  • 327.
  • 328.
  • 329.
  • 330.
  • 331.
  • 332.
  • 333.
  • 334.
  • 335.
  • 336.
  • 337.
  • 338.
  • 339.
  • 340.
  • 341.
  • 342.
  • 343.
  • 344.
  • 345.
  • 346.
  • 347.
  • 348.
  • 349.
  • 350.
  • 351.
  • 352.
  • 353.
  • 354.
  • 355.
  • 356.
  • 357.
  • 358.
  • 359.
  • 360.
  • 361.
  • 362.
  • 363.
  • 364.
  • 365.
  • 366.
  • 367.
  • 368.
  • 369.
  • 370.
  • 371.
  • 372.
  • 373.
  • 374.
  • 375.
  • 376.
  • 377.
  • 378.
  • 379.
  • 380.
  • 381.
  • 382.
  • 383.
  • 384.
  • 385.
  • 386.
  • 387.
  • 388.
  • 389.
  • 390.
  • 391.
  • 392.
  • 393.
  • 394.
  • 395.
  • 396.
  • 397.
  • 398.
  • 399.
  • 400.
  • 401.
  • 402.
  • 403.
  • 404.
  • 405.
  • 406.
  • 407.
  • 408.
  • 409.
  • 410.
  • 411.
  • 412.
  • 413.
  • 414.