Ваш document.write()
вызов происходит сразу после загрузки страницы, до того, как ваш img
загружен и отрисован, и до того, как ваш обработчик onclick
сможет работать. Вам нужно подождать, чтобы сгенерировать URI данных, пока все не закончится с холстом.
Игнорирование onclick
, вот что записывает URL данных после того, как изображение загружено и нарисовано на холсте повернутым способом:
<!DOCTYPE html>
<html><head>
<title>Rotated Image Data URL</title>
<style type="text/css" media="screen">
canvas, textarea { display:block }
</style>
</head><body>
<canvas id="canvas"></canvas>
<textarea id="data" rows="20" cols="80"></textarea>
<img id="echo">
<script type="text/javascript">
var can = document.getElementById('canvas');
var ctx = can.getContext('2d');
var img = new Image();
img.onload = function(){
can.width = img.width;
can.height = img.height;
ctx.translate(img.width-1, img.height-1);
ctx.rotate(Math.PI);
ctx.drawImage(img, 0, 0, img.width, img.height);
var url = document.getElementById('data').value = can.toDataURL();
document.getElementById('echo').src = url;
}
img.src = 'gkhead.jpg';
</script>
</body></html>
Вы можете увидеть это демо в действии здесь: http://phrogz.net/tmp/upside-down-image-url.html
Обратите внимание, что загружаемое изображение должно быть в том же домене, что и ваш скрипт, иначе вам не разрешат создавать URL данных.