Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.09.2015, 12:31
Аспирант
Отправить личное сообщение для Валерий1996 Посмотреть профиль Найти все сообщения от Валерий1996
 
Регистрация: 11.06.2015
Сообщений: 74

Как сохранять изображения в localStorage?
Подскажите где ошибка в коде ? Я пытаюсь сохранить изображение з гугл по урл в локальное хранилище, потом достать из хранилища изображение и вставить в DOM.

Вот мой код :
<canvas  id='example'></canvas>
<img id="imageId" src="" >



function getBase64Image(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    var dataURL = canvas.toDataURL("http://shrek.by/Photo/Shrek.jpg");

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}




var image = document.getElementById('imageId');
var b64image = getBase64Image(image);
localStorage.setItem('imageIdCached', b64image);



Вот весь код: http://jsfiddle.net/t52ka/123/

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

Сначала вопрос такой - вы это для себя хотите или же для посетителей вашего ресурса?
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2015, 13:04
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Валерий1996,
Во первых ваш скрипт выполняется до загрузки body и выдает ошибку. Во вторых вы не правильно пользуетесь АПИ canvas
https://developer.mozilla.org/en-US/...ment/toDataURL
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2015, 13:12
Аспирант
Отправить личное сообщение для Валерий1996 Посмотреть профиль Найти все сообщения от Валерий1996
 
Регистрация: 11.06.2015
Сообщений: 74

Сообщение от laimas Посмотреть сообщение
Сначала вопрос такой - вы это для себя хотите или же для посетителей вашего ресурса?
Это не ресурс , это браузерное приложение . Поэтому нужна возможность подгружать картинки по урл , засововать в локальное хранилище, с возможностью потом достать картинку с локального хранилища.
Ответить с цитированием
  #5 (permalink)  
Старый 15.09.2015, 13:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

У вас все не правильно, к тому же запрос по url породит ошибку SecurityError. Браузерное приложение это как, плагин к нему?
Ответить с цитированием
  #6 (permalink)  
Старый 15.09.2015, 13:23
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Валерий1996,
http://stackoverflow.com/questions/2...-securityerror
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2015, 13:29
Аспирант
Отправить личное сообщение для Валерий1996 Посмотреть профиль Найти все сообщения от Валерий1996
 
Регистрация: 11.06.2015
Сообщений: 74

Сообщение от laimas Посмотреть сообщение
У вас все не правильно, к тому же запрос по url породит ошибку SecurityError. Браузерное приложение это как, плагин к нему?
А если так: http://jsfiddle.net/bonilka/2f1kj48g/ ?
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2015, 13:59
Аспирант
Отправить личное сообщение для Валерий1996 Посмотреть профиль Найти все сообщения от Валерий1996
 
Регистрация: 11.06.2015
Сообщений: 74

Сообщение от laimas Посмотреть сообщение
У вас все не правильно, к тому же запрос по url породит ошибку SecurityError. Браузерное приложение это как, плагин к нему?
Это типа приложения на стороне клиента(браузера), написаное на клиетском, ява скрипте без использования сервера. Всё, что должно делать это прложение брать картинку по урл , сохранять её в локальное хранилище, чтоб можна было достать потом картинку и и вставить в dom
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Как уменьшить размер изображения с помощью JS? Dimaz Javascript под браузер 27 22.04.2015 00:26
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как найти и посчитать одинаковые изображения в массиве? Michael_isr Общие вопросы Javascript 2 05.08.2014 16:55
как узнать размер изображения x-yuri Общие вопросы Javascript 4 24.01.2009 22:29