美文网首页
image 转二进制的种种方法

image 转二进制的种种方法

作者: IAIAE | 来源:发表于2016-08-16 00:04 被阅读0次

根据标题来看,是个很泛泛的说法。这只是一种大致的思路。web端需要操作图片的时候,有时需要的不仅仅是一个src,可能老大要你将获取到的图片转为二进制,以方便保存、上传、复制、粘贴等等。怎么做呢?

假设你有一个<img>标签,图片已经在网页中显示出来了,你能直接(同步的)取到它的二进制格式吗?答案好像是否定的。
我们知道图片的src,如果要加载一遍src需要等待,需要异步的回调。既然图片已经显示出来了,我们为何还要再去load一遍图片呢?我是这么想的,但是现实情况好像没这么完美。

第一种方法:Ajax请求图片可以返回Blob或ArrayBuffer。后用FileReader,可以读取Blob或者ArrayBuffer

function toDataUrl(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.responseType = 'blob';  //设定返回数据类型为Blob
  xhr.onload = function() {
    var reader = new FileReader();
    reader.onloadend = function() {
      callback(reader.result);    //FileReader读取后的回调
    }
    reader.readAsDataURL(xhr.response);   //xhr.response就是一个Blob,用FileReader读取
  };
  xhr.open('GET', url);
  xhr.send();
}

用法:
toDataUrl('http://path/to/your/pic.png',function(dataUrl){
    console.info(dataUrl);   //dataUrl是base64格式
});  

该方法很慢,两个回调函数。也需要浏览器兼容

第二种方法:图片加载后用canvas画出来,然后再toDataUrl

function toDataUrl(src, callback, outputFormat) {
  var img = new Image();
  img.crossOrigin = 'Anonymous';
  img.onload = function() {
    var canvas = document.createElement('CANVAS');
    var ctx = canvas.getContext('2d');
    var dataURL;
    canvas.height = this.height;
    canvas.width = this.width;
    ctx.drawImage(this, 0, 0);
    dataURL = canvas.toDataURL(outputFormat);   //image/png, image/jpeg
    callback(dataURL);
  };
  img.src = src;
}

方法执行完后,就等着GC自动回收img和canvas对象吧。

中间变量

有时候我们要关注这个过程的中间变量。比如第一种方法产生的Blob对象。

相关文章

  • image 转二进制的种种方法

    根据标题来看,是个很泛泛的说法。这只是一种大致的思路。web端需要操作图片的时候,有时需要的不仅仅是一个src,可...

  • image加载方法(转)

    //初始化 UIImageView *imageView=[[UIImageView alloc] initWit...

  • 数字逻辑第一章

    进位计数制: 二进制转八进制 二进制转十六进制等等 不管是什么转什么,都是二进制搭桥梁(当然有更快的方法) 主要是...

  • 十进制转二进制

    十进制转二进制 JAVA实现 一、toBinaryString()方法 利用Java自己封装的转换二进制静态方法直...

  • 位运算符 和二进制换算 、Number的常用方法

    二进制换算 十进制转 二进制方法例如 52 转为二进制 1111001转为十进制 位运算符 | 按位或 ...

  • iOS view转image方法

  • 歇一天再试下

    我们需要先知道十进制转二进制和二进制转十进制的方法: 首先是十进制转二进制:用整数除以2取余数,依次类推直到商为0...

  • 进制间的转化

    进制间的转化 二进制:2^3 = 8 所以在转8进制时选3位image.png2^4 = 16 所以在转16进制时...

  • 二进制,八进制,十进制,十六进制转换

    十进制转二进制十进制转二进制 二进制转十进制十进制转二进制 二进制转八进制二进制转八进制 八进制转成二进制八进制转...

  • 前端打印

    方法1 步骤: 1、用html2canvas,将html转image2、image放入jsPDF中3、window...

网友评论

      本文标题:image 转二进制的种种方法

      本文链接:https://www.haomeiwen.com/subject/zlfpsttx.html