简体   繁体   English

如何使用canvas.toDataURL()在Adobe AIR中获取图像的base64?

[英]How to use canvas.toDataURL() to get base64 of image in Adobe AIR?

Is it possible to use canvas.toDataURL() in Adobe AIR? 是否可以在Adobe AIR中使用canvas.toDataURL()

When I try I get the following error: 当我尝试时,我收到以下错误:

Error: SECURITY_ERR: DOM Exception 18 错误: SECURITY_ERR:DOM异常18

Adobe AIR enforces same origin for images used in the canvas API. Adobe AIR对canvas API中使用的图像强制执行相同的原点。 Once you've used something from another domain in your canvas, you can't get pixel data back out of it. 一旦您在画布中使用了来自其他域的内容,就无法从中获取像素数据。 However, you can make use of the Loader class to get the pixel data, and convert it into a canvas ImageData. 但是,您可以使用Loader类来获取像素数据,并将其转换为画布ImageData。

For example: 例如:

function getDataURL(url, callback) {
  var loader = new air.Loader();
  loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(event) {
    var bitmapData = loader.content.bitmapData;

    var canvas = document.createElement('canvas');
    canvas.width = bitmapData.width;
    canvas.height = bitmapData.height;
    var context = canvas.getContext('2d');
    var imageData = context.createImageData(canvas.width, canvas.height);

    var dst = imageData.data;
    var src = bitmapData.getPixels(bitmapData.rect);
    src.position = 0;

    var i = 0;
    while (i < dst.length) {
      var alpha = src.readUnsignedByte();
      dst[i++] = src.readUnsignedByte();
      dst[i++] = src.readUnsignedByte();
      dst[i++] = src.readUnsignedByte();
      dst[i++] = alpha;
    }

    context.putImageData(imageData, 0, 0);
    callback(canvas.toDataURL());
  });
  loader.load(new air.URLRequest(url));
}

window.addEventListener('load', function() {
  getDataURL('http://www.google.com/images/logo.gif', function(dataURL) {
    air.trace(dataURL);
  });
}, false);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM