java中对base64与图片的互转实现

简介: 这只能算是一个小实现吧 ,也不算什么难点,就是加强下记忆,后续查找方便点而已,当然也有可能给你提供个小灵感啥的,那就再好不过了。

项目中有使用到对图片进行base64转码,然后解码保存的小功能,这边先记录下实现,网上的方案超级多,我也是从上面整理的,拿下来测试下。

想到java的实现后,又想到自己小博客好像也有对base64进行转化存储的功能,赶紧也贴上来,两遍对照下,反正都用得着。

java 代码

package test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/***
 * 测试转化图片为base64字符串
 * @author Administrator
 *
 */
public class Base64 {

    //转化图片为base64
    public static String convertStr(String filePath) throws Exception {
        InputStream is = new FileInputStream(filePath);
        byte[] data = null;
        data = new byte[is.available()];
        is.read(data);
        is.close();
        return java.util.Base64.getEncoder().encodeToString(data);
    }
    //转化字符串为图片
    public static String convertImg(String base64,String filePath) throws Exception {
        byte[] arr = java.util.Base64.getDecoder().decode(base64);
        for (int i = 0; i < arr.length; ++i) {
            if (arr[i] < 0) {// 调整异常数据
                arr[i] += 256;
            }
        }
        OutputStream out = new FileOutputStream(filePath);
        out.write(arr);
        out.flush();
        out.close();

        return filePath;
    }
    
    public static void main(String[] args) throws Exception {
        String filePath = "d:/ttt/a.png";
//        System.out.println(filePath);
//        String str = convertStr(filePath);
//        System.out.println(str);
        String ab = "--- 这个是转码后的base64";//贴上后发现有点长,就去掉了
        String filePath2 = "d:/ttt/b.png";
        convertImg(ab,filePath2);
    }
}

nodejs 代码

//实现nodejs版本图片base64互转
let filePath = 'd:/ttt/a.png';
let filePath2 = 'd:/ttt/c.png';
let fs = require('fs');

function convertImg(filePath){
    //读取图片,并转为base64
    return new Promise((resolve,reject)=>{
        let rs = fs.createReadStream(filePath);
        let chunks = [];
        let size = 0;
        rs.on('data',chunk=>{
            chunks.push(chunk);
            size += chunk.length;
        });
        rs.on('error',()=>{
            reject('读取错误');
        })
        rs.on('close',()=>{
            let buffer = Buffer.concat(chunks,size);
            let baseStr = buffer.toString('base64');
            resolve(baseStr);
        });
    });
}
function convertStr(str,filePath){
    return new Promise((resolve,reject)=>{
        var base64Data = str.replace(/^data:image\/\w+;base64,/, "");
        var dataBuffer = new Buffer(base64Data, 'base64');
        fs.writeFile(filePath,dataBuffer,function(err){
            if(err){
                reject(err);
            }else{
                resolve(true);
            }
        });
    });
}

convertImg(filePath).then((basestr)=>{
    return convertStr(basestr,filePath2);
})
.then(flag=>{
    console.log(flag);
})
.catch(err=>{
    console.log(err);
})

最后简单贴个截图看下

a.png - b.png - c.png


实现都不算是复杂,至于效率神马的..我也没测,估摸着相差应该也不会很大(额.也不一定。我瞎猜的)
以上是java和nodejs 对图片和base64两种格式的相互转化实现。

相关文章
|
2月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
90 4
|
2月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
65 2
|
2月前
|
算法 Java Linux
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
这篇文章介绍了如何使用Java的Graphics2D类在图片上合成另一个照片,并将照片切割成圆形头像的方法。
53 1
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
|
2月前
|
Java 数据安全/隐私保护
Java ffmpeg 实现视频加文字/图片水印功能
【10月更文挑战第22天】在 Java 中使用 FFmpeg 实现视频加文字或图片水印功能,需先安装 FFmpeg 并添加依赖(如 JavaCV)。通过构建 FFmpeg 命令行参数,使用 `drawtext` 滤镜添加文字水印,或使用 `overlay` 滤镜添加图片水印。示例代码展示了如何使用 JavaCV 实现文字水印。
141 1
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
25 1
|
2月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
106 1
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
141 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
2月前
|
算法 小程序 Java
java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
这篇文章介绍了如何使用Java获取微信小程序的二维码,并将其调整大小后合成到海报(另一张图片)上。
50 0
|
2月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
141 0