Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2179|回复: 1
打印 上一主题 下一主题

[html_html5_css]-----Blob、File

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2015-11-7 20:52:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hechengjin 于 2015-11-7 20:54 编辑

理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型
DataURL与File,Blob,canvas对象之间的互相转换的Javascript
  1. canvas转换为dataURL (从canvas获取dataURL)

  2. var dataurl = canvas.toDataURL('image/png');
  3. var dataurl2 = canvas.toDataURL('image/jpeg', 0.8);

  4. File对象转换为dataURL、Blob对象转换为dataURL

  5. File对象也是一个Blob对象,二者的处理相同。

  6. function readBlobAsDataURL(blob, callback) {
  7.     var a = new FileReader();
  8.     a.onload = function(e) {callback(e.target.result);};
  9.     a.readAsDataURL(blob);
  10. }
  11. //example:
  12. readBlobAsDataURL(blob, function (dataurl){
  13.     console.log(dataurl);
  14. });
  15. readBlobAsDataURL(file, function (dataurl){
  16.     console.log(dataurl);
  17. });

  18. dataURL转换为Blob对象

  19. function dataURLtoBlob(dataurl) {
  20.     var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  21.         bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  22.     while(n--){
  23.         u8arr[n] = bstr.charCodeAt(n);
  24.     }
  25.     return new Blob([u8arr], {type:mime});
  26. }
  27. //test:
  28. var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ==');

  29. dataURL图片数据绘制到canvas

  30. 先构造Image对象,src为dataURL,图片onload之后绘制到canvas

  31. var img = new Image();
  32. img.onload = function(){
  33.     canvas.drawImage(img);
  34. };
  35. img.src = dataurl;

  36. File,Blob的图片文件数据绘制到canvas

  37. 还是先转换成一个url,然后构造Image对象,src为dataURL,图片onload之后绘制到canvas

  38. 利用上面的 readBlobAsDataURL 函数,由File,Blob对象得到dataURL格式的url,再参考 dataURL图片数据绘制到canvas

  39. readBlobAsDataURL(file, function (dataurl){
  40.     var img = new Image();
  41.     img.onload = function(){
  42.         canvas.drawImage(img);
  43.     };
  44.     img.src = dataurl;
  45. });

  46. 不同的方法用于构造不同类型的url (分别是 dataURL, objectURL(blobURL), filesystemURL)。这里不一一介绍,仅以dataURL为例。

  47. filesystemURL不是指本地文件URL的形式(file:///….), 而是格式类似于 filesystem:http://... 的一种URL,支持沙盒文件系统的浏览器支持(目前仅Chrome)支持。

  48. Canvas转换为Blob对象并使用Ajax发送

  49. 转换为Blob对象后,可以使用Ajax上传图像文件。

  50. 先从canvas获取dataurl, 再将dataurl转换为Blob对象

  51. var dataurl = canvas.toDataURL('image/png');
  52. var blob = dataURLtoBlob(dataurl);
  53. //使用ajax发送
  54. var fd = new FormData();
  55. fd.append("image", blob, "image.png");
  56. var xhr = new XMLHttpRequest();
  57. xhr.open('POST', '/server', true);
  58. xhr.send(fd);
复制代码
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2015-11-7 21:05:33 | 只看该作者
file转blog
  1. function* fetpic(uriOptions) {
  2.     let XHR = require('app://app/mail/net/XHR.js');
  3.     let image = yield XHR.fetch(uriOptions);
  4.     let myavatar = image.request.response;
  5.     if( myavatar.toString() == '[object File]' ) {
  6.       let deferred = defer();
  7.       readBlobAsDataURL(myavatar, function (dataurl){
  8.           deferred.resolve(dataurl);
  9.       });
  10.       let mydataurl = yield deferred.promise;
  11.       let myblob = dataURLtoBlob(mydataurl);
  12.       myavatar = myblob;
  13.     }

  14.     expect(myavatar.toString()).to.eql('[object Blob]');  //[object File]
  15.     return myavatar;
  16.   }


  17. function readBlobAsDataURL(blob, callback) {
  18.     let a = new FileReader();
  19.     a.onload = function(e) {callback(e.target.result);};
  20.     a.readAsDataURL(blob);
  21.   }

  22.   function dataURLtoBlob(dataurl) {
  23.     let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  24.         bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  25.     while(n--){
  26.         u8arr[n] = bstr.charCodeAt(n);
  27.     }
  28.     return new Blob([u8arr], {type:mime});
  29.   }



  30. let imgURI = appGlobal.cli.appURI + 'test/data/pic.jpg';
  31.     let uriOptions = {
  32.       //uri:'http://news.cnr.cn/native/pic/20151023/W020151023244447426179.jpg',
  33.       uri:imgURI,

  34.     }
  35.     //create blob
  36.     let contactAvatarUUID = yield* getBlobUUID(uriOptions);
  37.     expect(contactAvatarUUID).not.equal(undefined);
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 09:58 , Processed in 0.059367 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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