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

    哈喽大家好我是刘德华。

    今天项目优化了一下上传头像的功能。采用 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," 解码之前这个得去掉。

  • 相关阅读:
    Java三大框架
    单例模式和工厂模式(百度文库)
    使用java代码编辑oracle数据库
    extends 与implements的区别和用法
    介绍MVC编程架构模式
    接口具体是什么东西
    Servlet和JSP的本质和区别
    用户注册,登录,留言系统
    页面跳转的五种方法
    cookie的长度和限制数量
  • 原文地址:https://www.cnblogs.com/libra0920/p/5754356.html
Copyright © 2011-2022 走看看