LFZ
LFZ
  • 发布:2015-10-24 23:29
  • 更新:2024-04-09 14:53
  • 阅读:12110

js实现对图片的二进制流md5计算

分类:HBuilder

js实现对图片的二进制流md5计算,没找到好的办法,所以自己写了一个,分享出来大家参考。

//计算图片md5  
        function img_MD5(img_path,callback) {  
            plus.io.resolveLocalFileSystemURL(img_path, function(entry) {  
                var fileReader = new plus.io.FileReader();  
                fileReader.readAsDataURL(entry);  
                fileReader.onloadend = function(evt) {  
                    var format="image/jpeg";  
                    //抽取DataURL中的数据部分,从Base64格式转换为二进制格式  
                    var bin = atob(evt.target.result.split(',')[1]);  
                    //创建空的Uint8Array  
                    var buffer = new Uint8Array(bin.length);  
                    //将图像数据逐字节放入Uint8Array中  
                    for (var i = 0; i < bin.length; i++) {  
                        buffer[i] = bin.charCodeAt(i);  
                    };  
                    //利用Uint8Array创建Blob对象  
                    blob = new Blob([buffer.buffer], {type : format});  
                    var fileReader1 = new FileReader();  
                    fileReader1.readAsBinaryString(blob);  
                    fileReader1.onload = function(evt) {  
                        if (evt.target.readyState == FileReader.DONE) {  
                            var imgblob = evt.target.result;  
                            var sparkMD5 = new SparkMD5();  
                            sparkMD5.appendBinary(imgblob);  
                            var MD5 = sparkMD5.end();  
                            console.log("MD5:" + MD5);  
callback(MD5)  
                        }  
                    };  
                }  
            }, function(e) {  
                console.log("Resolve file URL failed: " + e.message);  
            });  
        }  
//使用方法  
var url=document.getElementById("ID").src;  
img_MD5(url,function (md5){  
                    console.log(md5)  
                })

对二进制流进行md5加密需要用spark-md5.js

最新发现本地图片nativeObj 里的bitmap.toBase64Data();拿到Base64是经过压缩的,拿到的是jepg;所以要用本地io把图片Base64读出来。

7 关注 分享
BoredApe 蔡繁荣 伟石 来来去去 晴天angular l***@163.com 4***@qq.com

要回复文章请先登录注册

LFZ

LFZ (作者)

回复 伟石 :
你这里报的是TypeError。把type: type改成type: "image/jpeg"就可以了
2015-12-22 16:48
伟石

伟石

因为android4.2以下版本不支持Blob对象,要用到它的上一版本BlobBuilder,借LFZ的楼分享一段代码,可以解决低版本android创建Blob出错的问题(提示:illegal constructor)如下:

//解决低版本android不支持Blob问题
var _Blob = function(data, datatype) {
var out;
try {
out = new Blob([data], {
type: datatype
});
} catch (e) {
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name == 'TypeError' && window.BlobBuilder) {
var bb = new BlobBuilder();
bb.append(data);
out = bb.getBlob(datatype);
} else if (e.name == "InvalidStateError") {
out = new Blob([data], {
type: datatype
});
} else {
console.debug("Errore");
}
}
return out;
}
2015-12-16 22:26
伟石

伟石

非常赞!感谢 LFZ分享,解决燃眉之急啊!
2015-12-10 20:28
蔡繁荣

蔡繁荣

关注下
2015-10-26 21:38