Rails, Canvas и Javascript - конвертировать изображение из Flickr в оттенки серого

Некоторое время я пытаюсь преобразовать изображение, размещенное на Flickr, в оттенки серого на лету.

Я пробовал решение javascript/canvas но был пойман одной политикой происхождения. Для этого существует решение $.getImageData, но поскольку это зависит от другого сервера, я думал, что он не будет очень надежным.

Я решил попробовать конвертировать изображения на стороне сервера. Использование Rails.

Мой первый вариант - преобразовать изображения в base64 с помощью AciveSupport :: Base64, прежде чем отображать их на canvas а затем конвертировать с помощью javascript. Таким образом, я могу обмануть одну и ту же политику происхождения. Просто интересно, как медленно все это преобразование будет каждый раз, когда кто-то загрузит страницу.

Другой вариант - использовать что-то вроде Rmagick, чтобы сделать трюк. Но я не уверен, могу ли я использовать RMagick, не сохраняя преобразованное изображение где-нибудь, прежде чем связывать его с моим представлением.

Было бы здорово иметь некоторые мысли об этих решениях, так как я новичок и понятия не имею, насколько неправильны эти реализации.

2 ответа

Просто опубликуйте здесь, как я реализовал решение. Я решил создать своего рода прокси для внешних изображений. Таким образом, я не поймаю одну и ту же политику происхождения и не могу обесцветить изображения, используя canvas и javascript с одним из многих доступных скриптов.

На мой взгляд:

<%= image_tag "/proxy?url=#{photoset.flickr_thumb_url}", :class => "gray" %>

На моем контроллере:

def image_proxy
 image_url = params[:url]
 image = open(image_url).read
 response.headers["Expires"] = CGI.rfc1123_date(Time.now + 1.day)
 send_data image, :filename => File.basename(image_url), :disposition => 'inline'
end

Меня просто раздражает тот факт, что любое изображение, которое кто-либо передает, используя этот URL-адрес, будет работать. Это не очень безопасно, не так ли? Я все еще пытаюсь понять, как это исправить. Буду признателен за любую помощь.


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

Что касается обслуживания фактического изображения, вам не нужен файл, само изображение представляет собой отдельную команду (действие) GET, которая должна поддерживаться вашим сервером. Таким образом, он может просто вернуть данные. Это не значит, что это всегда лучший подход.

licensed under cc by-sa 3.0 with attribution.