LFZ
LFZ
  • 发布:2015-10-24 23:12
  • 更新:2016-01-14 09:54
  • 阅读:7013

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

分类:HBuilder
  由于需要里要求对图片二进制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

2015-10-24 23:12 负责人:无 分享
已邀请:
panpanhtai

panpanhtai

atob,使用这个报错啊,
Uncaught InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded

  • 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

伊利丹

伊利丹

具体返回的是啥呀用了这个方法后?

老王

老王

可以试试 URL.createObjectURL( file )

蔡繁荣

蔡繁荣 - 发表是最好的记忆

获取图片的二进制流md5主要用于什么场景呢?

  • 伊利丹

    我们是打算上传图片的时候,先获取到图片的二进制流MD5,再发送到服务器存起来

    2016-01-14 10:02

该问题目前已经被锁定, 无法添加新回复