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

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

要回复文章请先登录注册

1***@163.com

1***@163.com

这里有个比较尴尬的问题,就是文件转成base64的话,大文件例如几百M的会导致app崩溃
2024-04-09 14:53
4***@qq.com

4***@qq.com

视频同理吗?
2023-05-24 11:38
8***@qq.com

8***@qq.com

回复 欧文plus :
我也是,老哥,解决了没
2021-06-05 12:13
MonikaChen

MonikaChen

我也是用spark-md5,根据官方的文档写的
2020-12-05 17:04
欧文plus

欧文plus

为什么我的转blob的时候就没响应了?
2020-12-04 21:22
k***@gmail.com

k***@gmail.com

文件md5获取 已经完美解决,支持 微信+android+ios+h5
有需求可以联系QQ3211247533
2020-08-15 17:10
LFZ

LFZ (作者)

回复 H5_flymorn :
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsBinaryString
2018-09-19 17:06
LFZ

LFZ (作者)

回复 H5_flymorn :
是的
2018-07-03 08:52
H5_flymorn

H5_flymorn

利用 plus.io.FileReader 读取文件后,已经拿到了图片的 base64 了,就不再需要再次利用 new FileReader() 多转换一遍了。


// 处理图片
function handlePic(file){
try{
//io
plus.io.resolveLocalFileSystemURL(file,
function(entry) {
entry.file( function(thisfile){
alert(thisfile.size + '--' + thisfile.name);
});
var fileReader = new plus.io.FileReader();
// 加载完成时事件
fileReader.onloadend = function(evt) {
// base64图片,比如:data:image/jpeg;base64,/9j/4AAQSkZ...
var base64 = evt.target.result;
//抽取DataURL中的数据部分,从Base64格式转换为二进制格式
var bin = atob(base64.split(',')[1]);//atob解码

// 利用 Spark MD5 计算MD5值
var sparkMD5 = new SparkMD5();
sparkMD5.appendBinary(bin);//载入数据
var MD5 = sparkMD5.end();
alert("MD5-1:" + MD5);
};
fileReader.readAsDataURL(entry);//载入数据
}, function(e) {
alert("Resolve file URL failed: " + e.message);
});
}catch(err){
alert(err.message);
}
}
2018-06-12 10:12
2***@qq.com

2***@qq.com

非常赞,非常感谢,想了好久没解决的问题
2017-04-18 00:05