Canvas getImageData () после рисования изображения из file: // URI - нужен обходной путь для всех браузеров - PullRequest
1 голос
/ 15 июля 2011

Я разработчик Construct 2, HTML5-редактора игр для Windows.Это в http://www.scirra.com.

Недавно я пытался добавить функцию, которая изменит изображение, преобразовав его на холсте.Это довольно просто - нарисуйте изображение на холсте и вызовите getImageData(), чтобы получить пиксели.

Когда пользователь нажимает кнопку «Предварительный просмотр» в нашем приложении, все файлы выгружаются во временный файл на диске ибраузер запущен, чтобы показать это.Загрузка на сервер невозможна для предварительного просмотра - некоторые игры имеют размер в мегабайтах.

Однако большинство браузеров блокируют использование getImageData() для получения пикселей любого изображения, загруженного с диска вообще ,Я попытался поместить все необходимые файлы изображений в подкаталоги, как предлагает MDN в своем описании файла : // политики доступа .Это тоже не работает!

Флаг Chrome --allow-file-access-from-files исправляет это.Однако мне нужно поддерживать все основные браузеры.Существует ли подобный обходной путь хотя бы для Internet Explorer и Firefox?Я понятия не имею об Internet Explorer, и мне бы очень хотелось, чтобы было что-то, что не связано с ручным переходом: настройка в Firefox, иначе мы будем затоплены в запросах поддержки, спрашивающих: «Почему это не работает в Firefox ?!»

Кроме того, с какой стати такая политика безопасности необходима?!?Это кажется чрезмерным и делает такие приложения, как наши, действительно трудными для написания.

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 15 июля 2011

Ваше имя звучит знакомо из HN.

К настоящему моменту это довольно подробно изложено в спецификации, хотя это огорчает огромное количество людей. http:// и file:// имеют различное происхождение, и все, что пытается поставить одно на другое, испортит происхождение. Как вы заметили, сами файлы uri имеют свои собственные правила, которые еще более усложняют ситуацию.

Рисование чего-то на холсте, происхождение которого не совпадает? Жаль, что флаг очистки источника отныне ложный, что не позволяет вам делать разные вещи.

Полный список этих вещей находится в спецификации здесь.

Но я уверен, что вы уже все это знаете. Вы хотите обойти это.

Я бы предложил вместо того, чтобы пытаться усилить браузеры вокруг него, вы включаете какой-то легкий веб-сервис, так что все вещи появляются из одного источника. В будущем это вызовет гораздо меньше головных болей.

Возможно, вам понадобится что-то вроде Python SimpleHTTPServer . Но это решение действительно зависит от того, что вы уже включили в свой продукт уже на данном этапе.

...