2012-01-26 1 views
3

У меня есть приложение Rails, где пользователи могут загружать изображения. После загрузки изображения мне нужно наложить маску на это изображение, поэтому части его станут прозрачными. Это возможно?Могу ли я наложить маску на изображение с помощью Ruby?

ответ

5

RMagick (рубин манипуляции библиотеки изображений) позволяет применять отсечения путь на объектах: http://www.imagemagick.org/RMagick/doc/rvgclip.html

В принципе, вам нужно:

  • создать экземпляр вырезка путь
  • использовать рисунок API, чтобы нарисовать вашу маску
  • применить путь к изображению

Щелчок на замочной изображение»there выскакивает пример того, как достичь этого:

require 'rvg/rvg' 

hat = Magick::Image.read('images/Flower_Hat.jpg').first 
rvg = Magick::RVG.new(hat.columns, hat.rows) do |canvas| 
    keyhole = Magick::RVG::ClipPath.new do |path| 
     path.circle(60, canvas.width/2, 80) 
     path.polygon(canvas.width/2-10, 60, 40, 230, 160, 230, canvas.width/2+10, 60) 
    end 
    canvas.image(hat, nil, nil, 20, 20).styles(:clip_path=>keyhole) 

end 

rvg.draw.write('rvg_clippath.gif') 

EDIT:

Если вам нужно применить прозрачный фон простой подход должен обрезать затем используйте метод Image#composite! для добавления слоя trnasparent.

+0

Это выглядит как отличный пример! Думаю, мне не хватает знания терминологии. Но кажется, что обтравочные маски не поддерживают полупрозрачность. Могу я тоже это сделать? Например, используя слой маски, созданный в Photoshop? –

+0

Отредактировано мое сообщение. – Jef

+1

Пример обрезки/композиции здесь: http://weare.buildingsky.net/2006/10/18/render-greatlooking-collages-with-ruby-and-rmagick – Jef