Files
LNXSDK/leenkx/Sources/leenkx/logicnode/GetBlobUrlNode.hx
2025-01-22 16:18:30 +01:00

73 lines
2.4 KiB
Haxe

package leenkx.logicnode;
class GetBlobUrlNode extends LogicNode {
public var value: Dynamic;
public var property0: String;
public function new(tree:LogicTree) {
super(tree);
}
public function canvasToBlob(canvas : Dynamic) : js.html.Blob{
//No toBlob from Google so followed the help here - https://code.google.com/p/chromium/issues/detail?id=67587
var extractPattern = ~/data:([^;]*)(;base64)?,([0-9A-Za-z+\/]+)/;
extractPattern.match(canvas.toDataURL());
//assume base64 encoding
var binStr = js.Browser.window.atob(extractPattern.matched(3));
//convert to binary in ArrayBuffer
var buf = new js.lib.ArrayBuffer(binStr.length);
var view = new js.lib.Uint8Array(buf);
for(i in 0...view.length){
view[i] = binStr.charCodeAt(i);
}
var blob = new js.html.Blob([view], {type: extractPattern.matched(1)});
return blob;
}
public function videoToDataUrl(video: Dynamic){
var canvas:js.html.CanvasElement = new js.html.CanvasElement();
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0);
}
override function get(from: Int): Dynamic {
return switch (property0) {
case 'file':
var data: Dynamic = inputs[0].get();
data.getBlobURL(function(err, url) {
value = url;
});
value;
case 'object':
var data: Dynamic = inputs[0].get();
value = js.html.URL.createObjectURL(data);
value;
case 'canvas':
var data: Dynamic = inputs[0].get();
var blob = canvasToBlob(data);
value = js.html.URL.createObjectURL(blob);
trace(value);
value;
case 'video':
var video: js.html.VideoElement = inputs[0].get();
var canvas: js.html.CanvasElement = cast js.Browser.document.createElement('canvas');
canvas.width = video.width;
canvas.height = video.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0);
canvas.toDataURL();
default:
var data: Dynamic = inputs[0].get();
value = js.html.URL.createObjectURL(data);
value;
}
}
}