Java - 将base64编码解码成图片

这篇具有很好参考价值的文章主要介绍了Java - 将base64编码解码成图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了方便测试,我们可以使用一个图片编码网站,将图片进行base64编码

解密的代码如下

public static String generateImage(String base64, String path) {
    // 解密
    try {
      String savePath = "/**/imgtest/";
      // 图片分类路径+图片名+图片后缀
      String imgClassPath = path.concat(UUID.randomUUID().toString()).concat(".jpg");
​
      // 去掉base64前缀 data:image/jpeg;base64,
      base64 = base64.substring(base64.indexOf(",", 1) + 1);
      // 解密,解密的结果是一个byte数组
      Base64.Decoder decoder = Base64.getDecoder();
      byte[] imgbytes = decoder.decode(base64);
      for (int i = 0; i < imgbytes.length; ++i) {
        if (imgbytes[i] < 0) {
          imgbytes[i] += 256;
        }
      }
      
      // 保存图片
      OutputStream out = new FileOutputStream(savePath.concat(imgClassPath));
      out.write(imgbytes);
      out.flush();
      out.close();
      // 返回图片的相对路径 = 图片分类路径+图片名+图片后缀
      return imgClassPath;
    } catch (IOException e) {
      return null;
    }
}

因为图片的Base64字符串非常大,动辄几百K,所以不能直接使用String base64 = "${该图片的base64串}"进行测试,否则编译器会报错Java "constant string too long" compile error"。这个错误的出现,是因为字符串常量值的长度超过了65534,编译期检查没通过。运行时不存在这个限制,运行时的内存限制走的是堆内存,跟CPU分配内存相关。

Java - 将base64编码解码成图片

 

解决方法1:如果将字符串预先存到一个文件里,使用的时候再从文件里读出来,就不会有什么问题

// 从文件中读取字符串
public static String getFileContent(FileInputStream fis, String encoding) throws IOException {
  try (BufferedReader br = new BufferedReader(new InputStreamReader(fis, encoding))) {
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
      sb.append(line);
    }
    return sb.toString();
  }
}
​
​
public static void main(String[] args) throws IOException {
  // 从txt文件中读取base64字符串
  FileInputStream fis = new FileInputStream("/Users/valor/workspace/imgtest/bigimg.txt");
  String base64 = getFileContent(fis, "UTF-8");
​
  String path = "";
​
  // 将base64字符串翻译成图片
  String fileName = generateImage(base64, path);
  System.out.println(fileName);
}

解决方法2:或者如果我们是处于前后端数据交换的环境中,由于json对于string的长度是没有限制的,所以可以直接使用@ResponseBody通过一个Bean,去接收这串base64。文章来源地址https://www.toymoban.com/news/detail-408476.html

// bean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ImgInfo {
    Long id;
    String base64;
}
​
// controller
@RestController
public class String2ImgController {
​
    @Autowired
    private String2ImgService imgService;
​
    @PostMapping("/img/base64")
    public String transferImg(@RequestBody ImgInfo imgInfo) {
​
        String base64 = imgInfo.getBase64();
        // System.out.println(base64);
      
        // 去掉base64前缀 data:image/jpeg;base64,
        base64 = base64.substring(base64.indexOf(",", 1) + 1);
        // 解密,解密的结果是一个byte数组
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] imgbytes = decoder.decode(base64);
        for (int i = 0; i < imgbytes.length; ++i) {
          if (imgbytes[i] < 0) {
            imgbytes[i] += 256;
          }
        }
      
      // 对 byte 数组进行你所需要的操作……
    }
}

到了这里,关于Java - 将base64编码解码成图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS Base64编码和解码

    Base64 是一种编码方式,可以将任意字符(包括二进制字符流)转成可打印字符。JavaScript 定义了两个与 Base64 相关的全局方法。 btoa():字符串或二进制值转为 Base64 编码。 atob():把 Base64 编码转为原来的字符。 Base64 方法不能够操作非 ASCII 字符。 示例 要将非 ASCII 码字符转为

    2024年02月16日
    浏览(50)
  • Python中的Base64编码和解码

    Python3中Base64编码和解码,使用的是base64模块中的b64encode 和 b64decode方法,关于怎么使用,首先查看源码中的说明: b64encode : Encode the bytes-like object s using Base64 and return a bytes object b64decode : Decode the Base64 encoded bytes-like object or ASCII string s… The result is returned as a bytes object. 要点

    2024年02月13日
    浏览(41)
  • java使用hutool把服务器图片链接转为base64编码

    需求是把服务器的图片链接或者网上的图片链接地址转为base64位编码方便前端操作 base64编码转为图片在线网址 https://imgtobase64.d777.com/ 1.1 引入依赖 1.2 代码

    2024年02月12日
    浏览(42)
  • 前端Base64 编码和解码的使用方法

    使用 Base64 类从 ‘js-base64’ 库进行 Base64 编码和解码 vue: 使用 npm 或 yarn 包管理器来安装‘js-base64’ 库 原生: 通过 vue: 导入 Base64 类: 或者: vue: Base64 编码的使用示例: Base64 解码的使用示例: 或者,导入 encode 和 decode 函数: Base64 编码的使用示例: Base64 解码的使用示例

    2024年02月07日
    浏览(48)
  • php的Url 安全的base64编码解码类

    2024年02月04日
    浏览(45)
  • 【JS】实现 Base64 编码和解码(及中文乱码问题)

    JavaScript 定义了两个与 Base64 相关的全局方法。 遇到中文编码需要先做一次 URI 组件编码或对解码后的内容进行 URI 解码 示例:Base64 编码 示例:Base64 解码 中文乱码处理方法: 按照 Base64 插件:编解码: js-base64 ,判断是否是Base64编码格式: is-base64 插件使用

    2024年02月15日
    浏览(40)
  • Linux系统下使用命令行进行Base64编码和解码

    大家知道,编码是将数据转换为有效传输或存储所需格式的过程。相反,解码是将编码数据转换回其原始格式的过程。今天在这里向大家介绍一下 Base64 编码和解码,以便大家理解与学习。 Base64 是将二进制数据转换为 ASCII 的编码方式之一。通常,当二进制数据传输到无法正

    2024年02月11日
    浏览(47)
  • C# 采用3DES-MAC进行签名 base64解码与编码

    ** ** 3DES-MAC(Triple Data Encryption Standard Message Authentication Code)是一种消息认证码(MAC)算法,用于验证消息的完整性和真实性。3DES-MAC使用了3DES(Triple Data Encryption Standard)加密算法的一部分来生成MAC值。以下是使用C#示例演示如何使用3DES-MAC签名一个消息: 首先,你需要确保在

    2024年02月09日
    浏览(38)
  • 深入了解图片Base64编码

    title: 深入了解图片Base64编码 date: 2024/4/8 10:03:22 updated: 2024/4/8 10:03:22 tags: Base64编码 图片转换 HTTP请求 前端开发 移动应用 性能优化 图片压缩 Base64编码是一种将二进制数据转换为文本字符串的编码方式,通过将数据转换为一种可打印的ASCII字符集,以便在文本协议中传输。对图

    2024年04月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包