• Java踩坑笔记 —— base64转换为图片后图片显示不全


    Java踩坑笔记 —— base64转换为图片后图片显示不全

    前言

    最近在开发项目中,发现base64转换图片时,出现了图片显示不全,例如如下这样

    显示有误

    可以明显看到图片部分地区被遮挡

    解决思路

    显示图片有误的情况下,经过反复测试,发现字节长度有问题

    在这里插入图片描述

    明显可以发现解码后的长度比文件字节长度少了N个字节!

    后面在反复调试时,发现是因为在输出流写入时的问题:

    outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8),0,len);
    
    • 1

    改写为:

     outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8));
    
    • 1

    解决
    在这里插入图片描述

    字节长度一致,图片无遮罩,问题解决

    案例代码

    OutPutStream

        public static void writeToBase64Image(byte[] fileBytes,String dir,String path){
            File file = new File(dir,path);
            try {
                FileOutputStream outputStream = new FileOutputStream(file);//打开输入流
                BASE64Encoder base64Encoder = new BASE64Encoder();
                String base = base64Encoder.encodeBuffer(fileBytes);
                String base64Str = base64Encoder.encode(fileBytes);
                System.out.println("base64长度:" + base.length());
                System.out.println("base642长度:" + base64Str.length());
                int len = fileBytes.length;
                outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8));
                outputStream.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    InputStream

        public static File convertBase64ToImage(byte[] base64Byte,String name){
            File file = new File(name+".jpg");
            try {
                String baseImageSrc = new String(base64Byte);
                if(file.exists()){
                    return file;
                }
                BASE64Decoder base64Decoder =new BASE64Decoder();
                byte[] imgByte = base64Decoder.decodeBuffer(baseImageSrc);
                System.out.println("解码后的长度:" + imgByte.length);
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                fileOutputStream.write(imgByte,0,imgByte.length);
                fileOutputStream.flush();
                fileOutputStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            return file;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    结束语

    Java踩坑笔记 —— base64转换为图片后图片显示不全

    • 如果对你有帮助的话可以给我点赞收藏,十分感谢
    • 致力做学习笔记分享给大家
    • 可以转载 需标明 出处 本文链接。
    • 笔者一个开源项目:我的世界开服助手 希望大家可以点一下star

    感谢你的观看。

  • 相关阅读:
    laravel+vue2 element 一套项目级医院手术麻醉信息系统源码
    Linux下SUID提权学习 - 从原理到使用
    Dapr在Java中的实践 之 服务调用
    Docker详解与部署微服务实战
    『Flutter』开篇
    Apache初体验
    基于 DSP+FPGA 的排爆机器人控制系统设计与实现
    Tableau指标排行
    如何隐藏 Apache 的版本号和操作系统信息
    代码随想录50——动态规划: 123买卖股票的最佳时机III、188买卖股票的最佳时机IV
  • 原文地址:https://blog.csdn.net/qq_33638188/article/details/126315551