起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1894|回复: 4

[处理中3] 【求助】怎样将base64编码字符串,生成图标到本地指定目录?

[复制链接]

1

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
QQ
发表于 2017-9-22 14:44:52 | 显示全部楼层 |阅读模式
代码如下:
//调用拍照,成功则返回base64编码字符串
  navigator.camera.getPicture(onSuccess, onFail, {
                        destinationType:navigator.camera.DestinationType.DATA_URL,
                        quality:70,
                        targetWidth:768,
                        targetHeight:1024,
                         sourceType : 1,
                         saveToPhotoAlbum:true
                });
//拍照成功调回
function onSuccess(imageURI) {
                        var dfd = $.Deferred();
                        saveDataTofilesystem("/巡视/tangfengfan11.jpg",imageURI,dfd);//存成图片
                         dfd.resolve();
}
//base64编码转化为bold
   
               function convertBase64UrlToBlob(Base64code) {
                        // var bytes=window.atob(base64code.split(',')[1]);
                        // //去掉url的头,并转换为byte
                        var bytes = window.atob(Base64code);
                        // 处理异常,将ascii码小于0的转换为大于0
                        var ab = new ArrayBuffer(bytes.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < bytes.length; i++) {
                                ia = bytes.charCodeAt(i);
                        }
                        return new Blob([ab], {
                                type : 'image/jpeg'
                        });
                }
//将转换好的blod写成**.jpg图片文件
        
         function saveDataTofilesystem (fileurl,Base64code,dtd) {
                        var self = this;
                       
                        window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
                        window.requestFileSystem(window.PERSISTENT,0, function(fs) {        
                                fs.root.getFile(fileurl, {
                                        create : true
                                }, function(fileEntry) {
                                        fileEntry.createWriter(function(fileWriter) {
                                                var data = convertBase64UrlToBlob(Base64code);
                                                fileWriter.seek(0)
                                                fileWriter.write(data);
                                                dtd.resolve();
                                                //alert('save success'+fileurl);
                                        }, function(err) {
                                                alert("错误码 :" + err.code);
                                        });
                                }, function(err) {
                                        alert("错误码 :" + err.code);
                                });

                        },  function(err) {
                                        alert("错误码 :" + err.code);
                                });
                }   
问题:以上代码可顺利执行,且成功在sd卡上生成了图片文件,路径为:/巡视/tangfengfan11.jpg
但图片打开为空白?困扰了很多天,求大神指导~~万分感谢

1

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
QQ
 楼主| 发表于 2017-9-22 14:50:00 | 显示全部楼层
怎样将base64编码字符串,生成图片到本地指定目录?
是生产图片,不是图标,标题写错
回复 支持 反对

使用道具 举报

5

主题

24

帖子

111

积分

初级会员

Rank: 2

积分
111
QQ
发表于 2017-9-24 15:51:31 | 显示全部楼层
将base64字符串通过baas的action传到后台,后台base64解码后直接存成图片文件即可。
注意两点:
1. 保存的文件格式要和base64编码的时候一致;
2. 控件返回的字符串头部要去掉。
回复 支持 反对

使用道具 举报

5

主题

24

帖子

111

积分

初级会员

Rank: 2

积分
111
QQ
发表于 2017-9-24 16:19:51 | 显示全部楼层
//base64编码转化为bold
   
               function convertBase64UrlToBlob(Base64code) {
                        // var bytes=window.atob(base64code.split(',')[1]);
                        // //去掉url的头,并转换为byte
                        var bytes = window.atob(Base64code);
                        // 处理异常,将ascii码小于0的转换为大于0
                        var ab = new ArrayBuffer(bytes.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < bytes.length; i++) {
                                ia = bytes.charCodeAt(i);
                        }
                        return new Blob([ab], {
                                type : 'image/jpeg'
                        });
                }

为什么要把这行注释掉?这行的目的就是去掉字符串头部"data:image/jpg;base64,"
建议你仔细检查转换前的base64,贴出来看看。
回复 支持 反对

使用道具 举报

5

主题

24

帖子

111

积分

初级会员

Rank: 2

积分
111
QQ
发表于 2017-9-24 16:33:01 | 显示全部楼层
本帖最后由 luckmeng 于 2017-9-24 16:34 编辑

//base64编码转化为bold
   
               function convertBase64UrlToBlob(Base64code) {
                        var bytes=window.atob(base64code.split(',')[1]);
                        // //去掉url的头,并转换为byte
                       //  var bytes = window.atob(Base64code);
                        // 处理异常,将ascii码小于0的转换为大于0
                        var ab = new ArrayBuffer(bytes.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < bytes.length; i++) {
                                ia = bytes.charCodeAt(i);
                        }
                        return new Blob([ab], {
                                type : 'image/jpeg'
                        });
                }
这样试试...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-5 05:46 , Processed in 0.109529 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表