代碼片-base64 圖片資源與字節數組轉換

1.Java>根據圖片鏈接獲取圖片資源後轉字節數組

    // 調用方式
    // byte[] imgBytes3 = getBytesByUrl("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2213668399,1480023379&fm=26&gp=0.jpg");
    public static byte[] getBytesByUrl(String urlPath) {
        byte[] data = null;
        InputStream is = null;
        HttpURLConnection conn = null;
        try {
            URL url = new URL(urlPath);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            // conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(6000);
            is = conn.getInputStream();
            if (conn.getResponseCode() == 200) {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int length = -1;
                try {
                    while ((length = is.read(buffer)) != -1) {
                        baos.write(buffer, 0, length);
                    }
                    baos.flush();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
                data = baos.toByteArray();
                try {
                    is.close();
                    baos.close();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            } else{
                data=null;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if(is != null){
                    is.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            conn.disconnect();
        }
        return data;
    }

2. 文件上傳資源編碼轉換

2.1. Vue>原生 Input 組件獲取圖片 Base64 編碼資源

<input type="file" accept="image/*" @change="selectImg()" ref="file"/>

    此處使用 Promise 將上傳圖片資源 evt.target.result(Base64Data) 放全局變量

export default {
  data: function () {
    return {
      // 文件名稱,文件Base64編碼資源
      fileData: {
        fileName: '',
        imageBase64Data: ''
      } 
    }
  }
  methods: {
    // 選擇文件
    selectImg () {
      let imgFile = this.$refs.file.files[0]
      if (!imgFile) {
        return;
      }
      this.fileData.fileName = imgFile.name
      let imageType = /^image\//;
      if (!imageType.test(imgFile.type)) {
        alert('請選擇圖片!')
        return;
      }
      if (imgFile.size > 5 * 1024 * 1024) {
        alert('請選擇不大於5M圖片!')
        return;
      }
      let reader = new FileReader();
      reader.readAsDataURL(imgFile);
      //讀取文件
      this.onloadFile(reader).then((result)=>{
        this.fileData.imageBase64Data = result
      })
    },
    // onload 回調結果放全局變量
    onloadFile (reader) {
      return new Promise(function(resolve, reject) {
          reader.onload = function(evt) {
              resolve(evt.target.result)
          }
      })
    }
  }
}

2.2Java>Base64 編碼資源轉 byte[]

    圖片文件 Base64 編碼示例

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL ...... MVEi//2Q==

    F12 打開瀏覽器控制檯,查看圖片資源,可以看到這些資源擁有固定的前綴;data 表示取得數據的協定名稱,image/png 是數據類型名稱,base64 是數據的編碼方法,"base,"後面纔是圖片文件 base64 編碼後的數據。轉換二進制數組時注意要去掉前綴

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;

public class Test{
    public static final String IMAGE_JPEG_BASE64 = "data:image/jpeg;base64,";
    public static final String IMAGE_PNG_BASE64 = "data:image/jpeg;base64,";
    public static final String IMAGE_GIF_BASE64 = "data:image/jpeg;base64,";
    public static final String IMAGE_ICON_BASE64 = "data:image/jpeg;base64,";
    public static void main(String args[]) throws IOException {
        String imageBase64Data = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL ...... MVEi//2Q==";
        imageBase64Data = imageBase64Data.substring(DATA_IMAGE_JPEG_BASE64.length());

        // base64Url 轉 byte[] 方式一
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] imgByteData = base64Decoder.decodeBuffer(imageBase64Data);
        // byte[] 轉 base64
        String base64Data = Base64.encodeBase64String(imgByteData)

        // base64Url 轉 byte[] 方式二
        imgByteData = Base64.decodeBase64(imageBase64Data);
    }
}

Power By niaonao, The End

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章