安卓中图片和Base64编码字符集的相互转换

时间:2023-01-11 12:19:21

前言:有几天没写博客了,最近赶项目,还有好哥们的婚礼加在一起,实在是忙坏了。说起好哥们结婚,就想多说几句。想必大家和我一样,在学校时有那么几个臭味相投的哥们,不多也不算少,一起上课,吃饭,去图书馆(其实次数很少),打球,玩游戏,通宵,谈人生理想(其实就是瞎扯淡)等等,天天腻在一起,没心没肺,打打闹闹,直到毕业还觉得时间太少。所以就有这么一个约定:“”我结婚的时候你一定要来哦,这样我比较有安全感。。。“”,想吐就吐吧,别憋着。上次聚在一起是其中一个山东临沂的结婚,算算已经两年半了,当时我还在天津上班,离山东不太远,和天津的一个同学一起去一起回的,那时候毕业才两年,感触没那么深,就是觉得见面的机会越来越少。这次是连云港东海县的同学,三月一号通知的我们四月2号结婚,挺想他们,商量下时间就直接买票了。去了三天,说出来也不怕笑话,一号下午从成都走,四号凌晨回的成都,呆了三天,除了喝酒,在宾馆休息的时候就一起打王者荣耀,等车时候开小时房打,也吵架,说这不对说那不好的,玩得还挺开心,一点不觉得无聊。下个结婚的不知道是谁,希望快点。

不好意思扯得有点远了。

言归正传,项目中遇到图片上传的问题,需要将图片转换成Base64编码的字符集,服务器端自己处理。只知道java中有提供这个API,但是需要导入jar包,安卓中不知道有没有,也没用过,直接在Studio中打出Base64,有个Base64的类点进去看看,一看有decode,encode,还有编码字符串,不用说,就是它了。看看方法介绍就开始测试。下面把Base64这个类的介绍贴出来,这是andriod.util包下的,有兴趣的同学可以进去看看。


/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.util;

import java.io.UnsupportedEncodingException;

/**
 * Utilities for encoding and decoding the Base64 representation of
 * binary data.  See RFCs <a
 * href="http://www.ietf.org/rfc/rfc2045.txt">2045</a> and <a
 * href="http://www.ietf.org/rfc/rfc3548.txt">3548</a>.
 */
public class Base64 {
。。。。
}

这里我主要用到里面的两个方法,decode和encode,然后封装一下,便于重复使用。下面是我封装的代码,很简单,相信大家一看就明白,直接上代码。


将图片转换成Base64编码的字符串

 /**
     * 将图片转换成Base64编码的字符串
     * @param path
     * @return base64编码的字符串
     */
    public static String imageToBase64(String path){
        if(TextUtils.isEmpty(path)){
            return null;
        }
        InputStream is = null;
        byte[] data = null;
        String result = null;
        try{
            is = new FileInputStream(path);
            //创建一个字符流大小的数组。
            data = new byte[is.available()];
            //写入数组
            is.read(data);
            //用默认的编码格式进行编码
            result = Base64.encodeToString(data,Base64.DEFAULT);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(null !=is){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return result;
    }


//base64编码字符集转化成图片文件

 /**
     *base64编码字符集转化成图片文件。
     * @param base64Str
     * @param path 文件存储路径
     * @return 是否成功
     */
    public static boolean base64ToFile(String base64Str,String path){
        byte[] data = Base64.decode(base64Str,Base64.DEFAULT);
        for (int i = 0; i < data.length; i++) {
            if(data[i] < 0){
                //调整异常数据
                data[i] += 256;
            }
        }
        OutputStream os = null;
        try {
            os = new FileOutputStream(path);
            os.write(data);
            os.flush();
            os.close();
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }catch (IOException e){
            e.printStackTrace();
            return false;
        }

    }





好了,是不是很easy,今天的学习就结束了,谢谢大家支持。