I am trying to resize an image and return a base64 string representation using canvas.toDataUrl ().
My code is as follows (see below). My problem is that every time I start it over again, it returns "data:".
Then, when I repeat the re-determination of the size (the call using the button), it works fine and returns me a non-empty base64 string. What's happening?
function drawAndResizeFunction(images) var qDraw = $q.defer(); // 1 drawCanvasWrapper().then(function(canvasData){ qDraw.resolve(canvasData) }); // 2 function drawCanvasWrapper() { var pResults = images.map(function (imageObj) { //return drawCanvassIter(imageObj.tempURL); // tempUrl return resizeIter(imageObj.tempURL).then(function(result){ console.log("resized", result) // *** RETURNS data:, in first attempt return result; }) }); return $q.all(pResults); }; // 3inval // returns canvasdata function resizeIter(nativeURL) { console.log("resizeIter") var qResize = $q.defer(); var canvas = document.getElementById("resizecanvas"); var ctx = canvas.getContext("2d"); var img = new Image(); img.src = nativeURL; var newScales = resizeDimensions(img.width, img.height) var iw =canvas.width =img.width =newScales.iw; var ih =canvas.height =img.height =newScales.ih; img.onload = function () { // --> 4 ctx.drawImage(img, 0, 0, iw, ih); $timeout(function(){ qResize.resolve(canvas.toDataURL("image/jpeg")); }, 200) }; return qResize.promise; // // function resizeDimensions(iw, ih) { var scaleFactor = 1; var targetSize = 800; if (iw > targetSize || ih > targetSize) { if(iw > ih) { scaleFactor = targetSize/iw; } else { scaleFactor = targetSize/ih; } } var iwAdj = Math.floor(iw*scaleFactor); var ihAdj = Math.floor(ih*scaleFactor); return { ih: ihAdj, iw: iwAdj } }; }; return qDraw.promise; }; // done
source share