Показать сообщение отдельно
  #9 (permalink)  
Старый 15.09.2015, 15:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Валерий1996
А если так

И получается так? И не получится. Чтобы задать размер канве, нужно дождаться окончания загрузки изображения. Задание атрибута crossOrigin изображению разрешит загрузить его в канву, а вот при получении его эта ошибка возникать будет, хотя и данные будут возвращены. Чтобы не надоедало, можно обернуть в try ... catch.

function getImg(im) {
    var canvas = document.createElement('canvas'),
        ctx = canvas.getContext('2d');
        
    canvas.width = im.width;
    canvas.height = im.height;
        
    try {
        ctx.drawImage(im, 0, 0);
        //base64 to localStorage
        var imageData = canvas.toDataURL();
        console.log(imageData);
    } catch (e) {}
}


<img id="imageId" crossOrigin="*" src="https://unsplash.it/300/200/?random" onload="getImg(this)"/>


Одно ли изображение, а значит и элементов сохранения, я не в курсе, как и о применении самого скрипта. Пример простой, разберетесь сами чего вам надо.

PS. toDataURL("image/png") - это лишено смысла, так как по умолчанию тип возвращаемого изображения и будет png, задание типа имеет смысл, если нужно вернуть в jpeg формате.

PPS. crossOrigin - заголовок, который передается сервером, и равен либо конкретному домену, либо всем (*). У изображения же можно написать просто crossOrigin и все. А если говорить о локальном приложение, то тогда либо VBS, либо если под win, можно HTA-приложение, и никаких ограничений не будет.

Последний раз редактировалось laimas, 16.09.2015 в 00:30.
Ответить с цитированием