Rails, Canvas и Javascript - конвертируйте изображение из Flickr в оттенки серого - PullRequest
1 голос
/ 12 декабря 2011

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Просто выкладываю здесь, как я реализовал решение.Я решил создать своего рода прокси для внешних изображений.Таким образом, я не попаду в ту же политику происхождения и могу обесцветить изображения, используя 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, будет работать.Это не очень безопасно, не так ли?Я все еще пытаюсь найти способ исправить это.Буду признателен за любую помощь.

0 голосов
/ 12 декабря 2011

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

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

...