I am trying to get an image from another domain that I configured for CORS resolution and manipulate the pixels, and then I want to display the result and be able to manipulate the result. I can use both getImageData and toDataURL on the image I requested, so I know that part of the server is working. However, when I try to change the src attribute of the image to dataURL from the canvas, I get the error message "Cross-original loading failed, prohibited by Cross-Origin resource sharing policy".
function manipulateImage(img, func) { var canvas = document.createElement('canvas'); canvas.width = img.width; canvas.height = img.height; c = canvas.getContext('2d'); c.drawImage(img, 0, 0); width = canvas.width; height = canvas.height; imageData = c.getImageData(0, 0, width, height); y = 0; while (y < height) { x = 0; while (x < width) { var pixel = getPixel(imageData, x, y); func(pixel); setPixel(imageData, x, y, pixel); x++; } y++; } c.putImageData(imageData, 0, 0); console.log('done'); img.src = canvas.toDataURL(); } $(function() { img = new Image(); img.crossOrigin = ''; img.onload = function() { document.body.appendChild(img); } img.src = 'https://choros-cognition-test.s3.amazonaws.com/geotiffs/X8pEm_cl3_sm16_ra15_style_warp.png' $('#increase-button').on('click', function() { manipulateImage(img, function(pixel) { pixel[2] += 30; }); }); });
The strange part is that if I reset the crossOrigin attribute of the image to zero in the manipulation function, then it works. Why is this?
function manipulateImage(img, func) { img.crossOrigin = null; ....
javascript html5 cors cross-domain canvas
user2073343
source share