zoukankan      html  css  js  c++  java
  • Java 处理图片 base64 编码的相互转换

    出处:https://www.cnblogs.com/libra0920/p/5754356.html

    哈喽大家好我是刘德华。

    今天项目优化了一下上传头像的功能。采用 imagecropper 插件完成裁剪图片的效果。

    这个插件裁剪完的图片都是 base64 加密的字符串,上传头像也就涉及到了如何把加密的字符串转换成图片的问题。

    以下是代码:

    /**
     * @Description: 将base64编码字符串转换为图片
     * @Author: 
     * @CreateTime: 
     * @param imgStr base64编码字符串
     * @param path 图片路径-具体到文件
     * @return
    */
    public static boolean generateImage(String imgStr, String path) {
      if (imgStr == null)
        return false;
      BASE64Decoder decoder = new BASE64Decoder();
      try {
        // 解密
        byte[] b = decoder.decodeBuffer(imgStr);
        // 处理数据
        for (int i = 0; i < b.length; ++i) {
          if (b[i] < 0) {
            b[i] += 256;
          }
        }
        OutputStream out = new FileOutputStream(path);
        out.write(b);
        out.flush();
        out.close();
        return true;
      } catch (Exception e) {
        return false;
      }
    }

    解密自然也有加密。以下是加密:

    /**
     * @Description: 根据图片地址转换为base64编码字符串
     * @Author: 
     * @CreateTime: 
     * @return
     */
    public static String getImageStr(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);
    }

    再贴一个测试的main函数

    /**
     * 示例
     */
    public static void main(String[] args) {
        String strImg = getImageStr("F:/86619-106.jpg");
        System.out.println(strImg);
        generateImage(strImg, "F:/86619-107.jpg");
    }

    好了,打完收工。

     不过需要注意的是,一般插件返回的base64编码的字符串都是有一个前缀的。

    "data:image/jpeg;base64," 解码之前这个得去掉。

    为什么需要图片转成base64?   注意需要带上: "data:image/jpeg;base64," 这个前缀,减少http请求

    https://www.imooc.com/article/27804

  • 相关阅读:
    HTML文档类型DTD与浏览器怪异模式
    css控制非固定文本自动换行
    CSS圆角兼容IE6
    css命名规则
    一个程序员的世界(三) 全:(原名:一个程序员的世界观)
    Apache Ignite 学习笔记(6): Ignite中Entry Processor使用
    Apache Ignite 学习笔记(五): Primary和backup数据同步模式和处理分片丢失的策略
    Apache Ignite 学习笔记(四): Ignite缓存冗余备份策略
    Apache Ignite 学习笔记(三): Ignite Server和Client节点介绍
    Apache Ignite 学习笔记(二): Ignite Java Thin Client
  • 原文地址:https://www.cnblogs.com/But-you/p/10819325.html
Copyright © 2011-2022 走看看