2013-03-28 3 views
0

Я довольно новичок в холсте, поэтому, пожалуйста, извините, если это просто. Я хочу изменить размер изображений перед загрузкой, если браузер поддерживает это с помощью холста. Тем не менее, этот кодcanvas drawImage не работает

var img = document.createElement("img"); 
var reader = new FileReader(); 
    reader.onload = function(e) {img.src = e.target.result}; 
var files = event.target.files; 
    reader.readAsDataURL(files[0]); 
var canvas = document.createElement('canvas'); 
    canvas.width = 100; 
    canvas.height = 100; 
var ctx = canvas.getContext("2d"); 
    ctx.drawImage(img, 0, 0); 

терпит неудачу с

NS_ERROR_NOT_AVAILABLE: Компонент не доступен slice.call (docElem.childNodes, 0) [0] .nodeType;

в моем тестовом браузере Firefox. Что может быть неправильным?

Update

Очень странно: если добавить "предупреждение (холст);" как 3-я последняя строка (я иногда это делаю для отладки, я знаю, что могу и должен использовать console.log), ошибка не появляется, однако я все еще ничего не вижу из своего изображения ...

ответ

4

image должны быть загружены, чтобы быть нарисованы на холсте:

var img = new Image() 
img.onload = function() { 
    ctx.drawImage(img, 0, 0) 
} 
img.src="image.png" 

в вашем Exemple:

var img = document.createElement("img") 
var reader = new FileReader() 

var canvas = document.createElement('canvas') 
canvas.width = 100 
canvas.height = 100 
var ctx = canvas.getContext("2d") 

reader.onload = function(e) { 
    var img = new Image() 
    img.onload = function() { 
     ctx.drawImage(img, 0, 0) 
    } 
    img.src = e.target.result 
} 

var files = event.target.files 
reader.readAsDataURL(files[0]) 
+0

спасибо, но это не сделано с помощью строки reader.onload = function (e) {img.src = e.target.result}; –

+0

нет, примените dataURL на img.src, все равно нужно дождаться загрузки http://stackoverflow.com/questions/4776670/should-setting-an-image-src-to-data-url-be-available-immediately –

+0

не может заставить его работать ... можете ли вы использовать мой код для ответа? –

0

Если это проще для вас, вы можете загрузить изображение с HTML:

<img id="imagetoload" src="myimage.jpg" /> 
<script> 
    var image = document.getElementById("imagetoload"); 
</script> 

Но лучший способ - загрузить их с помощью javascript, как сказал Юкулеле.