由于需要里要求对图片二进制md5计算,并且在图片加入内容,没找到好的办法,所以自己写了一个,分享出来大家参考。
也可以从nativeObj 里的String bitmap.toBase64Data();拿到Base64;
function img_md5(img_path){
var img = new Image();
img.src =img_path;
img.onload = function() {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var w = this.width,
h = this.height;
canvas.width = w;
canvas.height = h;
context.drawImage(this, 0, 0, w, h);
var type = 'image/jpeg';
//将canvas元素中的图像转变为DataURL
var dataurl = canvas.toDataURL(type);
//抽取DataURL中的数据部分,并进行Base64解码
var bin = atob(dataurl.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对象
var blob = new Blob([buffer.buffer], {type: type});
var fileReader = new FileReader();
fileReader.readAsBinaryString(blob)
//提取成功
fileReader.onload=function(evt){
if(evt.target.readyState == FileReader.DONE){
//二进制数据结果
var imgFlag = evt.target.result;
//进行md5加密
var spark = new SparkMD5();
spark.appendBinary(imgFlag);
return spark.end();
}
}
}
}
对二进制流进行md5加密需要用spark-md5.js
请看http://ask.dcloud.net.cn/article/412
LFZ (作者)
我这里并没有报错,你是不是改了哪里?你在浏览器也报这个错?
2015-12-06 18:34
LFZ (作者)
return spark.end();不能这样返回,需要些回调函数
2015-12-06 18:35
panpanhtai
回复 LFZ:好,我这个和你的有点不一样,我的是想把本地的视频文件进行sha1,系统不提供二进制,也用了你的思路,读取的是dataurl,然后解码,但是最后能hash,但是结果不对。
2015-12-07 09:00
LFZ (作者)
理论上,视屏也可以读取base64出来,然后计算sha1的,不过你的sha1.js需要针对二进制流计算才行,平时用的sha1是对字符计算的。例如我计算md5就需要用spark-md5.js,其他的是计算不正确的。
2015-12-07 14:09
LFZ (作者)
http://ask.dcloud.net.cn/article/412
用这里的。用本地的push.io读取base64,这个页面没有更新代码,这里是经过了htnl5的画布,所以数据已经发生了变化。
2015-12-07 14:14
panpanhtai
回复 LFZ:看这个的,你说的sha,我也试了,用js,正常,用在app里面不行
2015-12-07 14:20
LFZ (作者)
app里面哪里不行?
2015-12-07 21:44
panpanhtai
回复 LFZ:是二进制流的,在web上正常,先没有弄这个,过几天再弄了
2015-12-08 09:47