Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2016, 12:59
Новичок на форуме
Отправить личное сообщение для Даша4 Посмотреть профиль Найти все сообщения от Даша4
 
Регистрация: 10.11.2016
Сообщений: 2

Метод getImageData работает наполовину
Здравствуйте. У меня как-то наполовину работает метод getImageData в канвасе. Когда я рисую квадрат, то эта функция работает нормально, а когда вставляю картинку она вообще не работает. В консоли выдает ошибку:
Код:
Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
Я беру код прямо с примеров, вот например:
document.getElementById("scream").onload = function() {
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var img = document.getElementById("scream");
    ctx.drawImage(img, 0, 0);
    var imgData = ctx.getImageData(0, 0, c.width, c.height);
	console.log(imgData.data[0]);
    // invert colors
    var i;
    for (i = 0; i < imgData.data.length; i += 4) {
        imgData.data[i] = 255 - imgData.data[i];
        imgData.data[i+1] = 255 - imgData.data[i+1];
        imgData.data[i+2] = 255 - imgData.data[i+2];
        imgData.data[i+3] = 255;
    }
    ctx.putImageData(imgData, 0, 0);
};

Может быть у меня старая версия JavaScript?
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2016, 13:17
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Даша4,
Картинка должна быть загружена на тот же домен, что и страница со скриптом. Картинки с чужого домена не читаются
При считывании с локального хоста тож помнится были сложности... вроде как в одной папке со страницей, и то, не со всех браузеров
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2016, 14:10
Новичок на форуме
Отправить личное сообщение для Даша4 Посмотреть профиль Найти все сообщения от Даша4
 
Регистрация: 10.11.2016
Сообщений: 2

да спасибо большое. Наверно эта функция еще не доработана. Я пыталась запустить ее на локальном компе. Просто я решила запустить пример.
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2016, 14:27
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Даша4, скорее наоборот, передоработана.)
Помнится самые первые версии в бэтах позволяли брать "чужие" картинки, что позволяло воровать информацию с других сайтов и потому эту дырку быстро закрыли.)
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 10.11.2016, 14:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Aetae Посмотреть сообщение
Даша4, скорее наоборот, передоработана.)
Помнится самые первые версии в бэтах позволяли брать "чужие" картинки, что позволяло воровать информацию с других сайтов и потому эту дырку быстро закрыли.)
Ну через линейный анонимайзер мон и сегодня... друго дело ненадёжно, сайт работает, анонимайзер на обслуге, хотя чичас большинство имеют прицепленное к сайту API проксирования, смысла в этих защитах ток от обывателя
Ответить с цитированием
  #6 (permalink)  
Старый 10.11.2016, 22:17
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Deff, нет, тут суть в ином. Картинки могут генерироваться персонально для человека и содержать конфиденциальные данные. Соответственно злоумышленник таким образом может получить такие картинки по прямым url, т.к. пользователь автоматизирован на целевом сайте, и украсть информацию. Всякие проксики, соответственно, авторизации не имеют, как и доступа к таким вещам.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 10.11.2016, 22:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

++
Ну да, под логином могут быть конфиденциальные файлы и сведения
Ответить с цитированием
  #8 (permalink)  
Старый 11.11.2016, 11:29
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Есть 3 варианта:
1) Атрибут crossorigin для img (поддерживается не во всех браузерах)
2) Загрузка картинки через свой сервер (если есть такая возможность)
3) Если вдруг картинка приходит с CORS-заголовками (что маловероятно), то её можно аяксом загрузить как блоб, передать в URL.createObjectURL, и создать картинку с таким адресом
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Ext.app.Application#onAppUpdate работает? khusamov ExtJS 1 17.12.2015 21:26
Не работает ajax при OnClick по ссылке firefox govorusha AJAX и COMET 8 06.06.2015 14:34
Не работает console.log.apply(this,arguments) - Почему? Почемучкин Javascript под браузер 9 31.10.2014 17:17
Неправильно работает метод each() KamalovRadik jQuery 12 17.11.2011 15:51
не работает метод kent666 Events/DOM/Window 6 04.10.2011 18:32