Android 图片和Base64转化,并保存相册

现在在Android开发中很少用到Base64的BASE64Encoder及BASE64Decoder,今天在h5中需要将图片的base64数据转化为图片保存到相册,项目中居然找不到BASE64Encoder及BASE64Decoder类,一顿百度方法怎么可以引用,最后发现还是将BASE64Encoder及BASE64Decoder类源码引入最方便;

直接下载源码

补充下:Base64的加密解密BASE64Encoder及BASE64Decoder是sun公司的内部方法,并没有在java api中公开过。在Android项项目中可以引用Base64类,却不能使用加密解密方法,下载上面源码放入项目直接可以引用;

1、将图片bitmap转成base64数据

    /**
     * 图片bitmap转成base64数据
     *
     * @param bitmap
     * @return
     */
    public String convertIconToString(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] appicon = baos.toByteArray();// 转为byte数组
        String bitString = Base64.encodeToString(appicon, Base64.DEFAULT);
        return bitString;
    }

2、将图片base64数据转化为bitmap

     /**
     * 将图片base64数据转化为bitmap
     * @param imgBase64
     */
    public Bitmap base64ToPicture(String imgBase64) {
        byte[] decode = Base64.decode(imgBase64, Base64.DEFAULT);
        Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
        return bitmap;
    }

3、将图片保存到相册并通知刷新

    /**
     * 将图片保存到相册并通知刷新
     */
    public void savePictureToAlbum(Context mContext, Bitmap bitmap) {
        if (bitmap == null) {
            return;
        }
        // 把文件插入到系统图库
        MediaStore.Images.Media.insertImage(mContext.getContentResolver(),
                bitmap, null, null);
        // 通知图库更新
        mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.parse("file://" + "/sdcard/namecard/")));
    }

4、对图片Base64数据解码并生成图片

     /**
     * 对图片Base64解码并生成图片
     *
     * @param imgStr      base64数据
     * @param imgFilePath 图片存放地址
     * @return
     */
    public boolean generateImage(String imgStr, String imgFilePath) {
        if (imgStr == null) // 图像数据为空
            return false;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            // Base64解码
            byte[] bytes = decoder.decodeBuffer(imgStr);
            for (int i = 0; i < bytes.length; ++i) {
                if (bytes[i] < 0) {// 调整异常数据
                    bytes[i] += 256;
                }
            }
            // 生成jpeg图片
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(bytes);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

最后注意点:

含有“data:image/*;base64”的头的编码,在decode或者转化为bitmap的时候就要去掉,否则是无法还原成功的。

如我获取到的图片base64数据就是以data:image/png;base64开头的:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkIAAAknCAYAAADGQBGRAAAgAElEQVR4Xly9uZJtW9KltaNvT5zuNplZlQ+GWem8Ac+AglJKoaAhYIYKCgoYImYggIKAYfxd/nnvPX2c6Du+b4zpEacqbu6MOBF7r7XmnD69GT7c59b/+7/9108bvra3+9psHjebrafNDv/Y2d7ZPD4+5bW/d7A5PDzh7zubh4etzdZmd7O7s897N5v7h6vN7d3l5vzLp833b1/4/nFzef55c3d9sbm/udy8Oj7cvDo53mz53vv7zdxwZ3d3c3h8vNnbP+Syu9x5e3N9eb25ub7Z7O7ucf097v24eXx44LNbm52drc3R0QHXOsqzXl9dbm64/t39Lfe/31zdbjZXd4xjZ4f37mzevXu/+eWXX/O3i6srrrHNOPbztw0/+0DbWx3j98urzSXvub76wjW/bc5evdqcnp5uDg4ONvv7+5tbnunq4tKp4d97TNMT77vh/Veb82/n+X54eJjXE8/0dHO1OWBsBycnm92D4802Y7znXncPPB/PcMjvD3jvhtl4fHrc3N3ebG5vrzdPjw8Z7wGPeMjr6emJl+/q1xbX2N7e5d9bXOth88By7TB3W/yOR8r7vO4+z727ud/sPN1uLr5/23z79o11umNeHftWxvz0xIIw50+P25s75u3hcWfz0/tfN+95PT1tbx7uec/mhhtcZy0d/8XXc9b3G+v7ffPAh5SE16/f5PXIux8Yy8393eaa1zbru7t/kHXnht4J6eFyytcW/+a99zfXmwfGfn19ubnlZ9+/y3zvHx5s9hjDPfNxw/o9Pt3zqHxubxd5OeLvJ7xO89rl37t7h8wfcsDrjrn3tXlkULzuWI+ry+95hgOuv8f8O3Sf75g1PuG1hUxs8W9l7+bqZrPFOrnWD7f3jP2Wy/CLe2SRZ37Y4ZpPd5vv379HBk5YS18jK5GL62vWaZt77eU9vl"

处理方法:

 if (!TextUtils.isEmpty(imgUrl) && imgUrl.contains(",")) {
    //拿到真正的base64数据
     String base64Img = imgUrl.split(",")[1];
 }

 Over,感觉有用给个赞支持下吧!

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将base64转化图片保存到本地,可以使用Python的base64和PIL库来实现。 首先,需要安装PIL库,在终端或命令提示符中运行以下命令: pip install pillow 接下来,在代码中导入相关库和模块: import base64 from PIL import Image 然后,定义一个函数来将base64转化图片保存到本地: def save_base64_image(base64_string, output_filename): # 去掉base64字符串开头的"data:image/png;base64,"部分 if base64_string.startswith('data:image/png;base64,'): base64_string = base64_string.replace('data:image/png;base64,', '') if base64_string.startswith('data:image/jpeg;base64,'): base64_string = base64_string.replace('data:image/jpeg;base64,', '') # 将base64字符串解码为二进制数据 image_data = base64.b64decode(base64_string) # 创建Image对象 image = Image.open(io.BytesIO(image_data)) # 保存图片到本地 image.save(output_filename) 最后,调用这个函数来保存图片base64_string = 'base64字符串' output_filename = '保存路径/文件名.jpg' save_base64_image(base64_string, output_filename) 通过以上步骤,你可以将base64转化图片保存到本地。记得将base64字符串替换为你实际的base64字符串,以及设置保存路径和文件名的正确值。 ### 回答2: 要将base64转化图片保存到本地,可以采取以下步骤: 1. 获取到base64编码的图片字符串。 2. 将base64编码的图片字符串解码为字节数据。 3. 创建一个文件对象,用于保存图片到本地。可以指定图片保存的路径和文件名。 4. 打开文件对象,以二进制写入模式写入字节数据。 5. 关闭文件对象,确保图片保存成功。 以下是一个简单的Python示例代码: ```python import base64 def save_base64_image(base64_str, save_path): # 解码base64字符串为字节数据 img_data = base64.b64decode(base64_str) # 创建文件对象 with open(save_path, 'wb') as img_file: # 写入字节数据到文件 img_file.write(img_data) print('图片保存成功!') # 测试示例 base64_str = 'data:image/png;base64,iVBORw0KGg...<省略部分内容>' save_path = 'path/to/save/image.png' save_base64_image(base64_str, save_path) ``` 此示例代码将base64编码的图片字符串解码为字节数据,并将其保存到指定路径的图片文件中。记得替换`base64_str`和`save_path`为你需要的值。执行代码后,如果没有报错,则表示图片保存成功。 ### 回答3: 使用Python语言可以很方便地将base64字符串转化图片保存到本地。下面是一个示例代码: import base64 def save_image_from_base64(base64_str, save_path): # 移除base64字符串前的"data:image/*;base64," base64_data = base64_str.split(",")[1] # 将base64字符串解码为图片二进制数据 img_data = base64.b64decode(base64_data) # 保存图片到本地文件 with open(save_path, 'wb') as img_file: img_file.write(img_data) # 示例使用 base64_str = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." save_path = "saved_image.png" save_image_from_base64(base64_str, save_path) 在示例代码中,首先我们需要移除base64字符串前面的"data:image/*;base64,"这一段,只保留base64编码的数据部分。然后使用base64.b64decode()函数将base64字符串解码为图片的二进制数据。最后,使用open()函数创建一个二进制写入模式的文件对象,将图片数据写入文件中,完成图片保存。 你可以将上述代码保存为一个.py文件,然后通过传递base64字符串和保存路径的参数,调用save_image_from_base64()函数,即可实现将base64转化图片保存到本地。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值