ajax 传递arraybuffer,javascript - Draw ajax arraybuffer response into canvas - Stack Overflow

Hello I request an Image from my server (binay, arraybuffer) and then I would like to convert that arraybuffer to valid imageData that can be drawn on any canvas element.

Besides the imageData made from the ajax request, I also have other imageData objects which I combine all together on a canvas (in order to flatten the image) and produce my final image. However the imageData as mentioned above from the server request results in pure noise I"m not sure what I'm doing wrong to create valid imageData.

Here is my method that tries to convert the arraybuffer into imageData without success.

ImageProcessor.prototype.imageData = function(data, width, height) {

width = width || this.settings.width;

height = height || this.settings.width;

var newData = (data instanceof Uint8ClampedArray) ? data : new Uint8ClampedArray(data);

var imageData = this.ctx.createImageData(width, height);

imageData.data.set(newData);

return imageData;

};

PS: I've managed to convert the arrayBuffer into a b64 image resource-URL and then create an image out of it and then draw th image on to the canvas element, but I'm not interested in such a solution because:

overkill in my opinion

uses callbacks

UPDATE

The images on the server are .png files (RGBA).

And bellow is the ajaxTransport used with jQuery in order to do the binary - arraybuffer requests for images from the server:

$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){

// check for conditions and support for blob / arraybuffer response type

if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob)))))

{

return {

// create new XMLHttpRequest

send: function(_, callback){

// setup all variables

var xhr = new XMLHttpRequest(),

url = options.url,

type = options.type,

// blob or arraybuffer. Default is blob

dataType = options.responseType || "blob",

data = options.data || null;

xhr.addEventListener('load', function(){

var data = {};

data[options.dataType] = xhr.response;

// make callback and send data

callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());

});

xhr.open(type, url, true);

xhr.responseType = dataType;

xhr.send(data);

},

abort: function(){

jqXHR.abort();

}

};

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值