Обрезать круговое изображение с рельсами стрекозы

Я использую dragonfly ~> 0.9.15

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

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

Вот фактическая команда, которую я взял из вопроса переполнения стека с помощью imagemagick.

/questions/34256954/obrezat-ili-zamaskirovat-izobrazhenie-v-krug/34256961#34256961

convert -size 200x200 xc:none -fill walter.jpg -draw "circle 100,100 100,1" circle_thumb.png

Когда я пытался добиться того же с помощью стрекозы, это был конфиг:

require 'dragonfly/rails/images'

Dragonfly[:images].configure do |c|
  c.job :crop_circle do
    process :resize, "320x440"
    encode :png
    process :convert, '-virtual-pixel HorizontalTile -background transparent -draw "circle 400,400 400,1" -compose Copy_Opacity -composite'
  end
end

Я получаю ошибку no such image когда это работает в журнале сервера.

Как настроить convert Функция для этого с помощью команд imagemagick?

1 ответ

Решение

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

Я не смог найти готовое решение, но мне удалось что-то собрать, взяв немного здесь и там.

Оказывается, есть очень простой способ сделать округленные изображения с помощью ImageMagick (6.8.9-1), используя опцию виньетки, которая описана здесь.

Следующая командная строка сгенерирует изображение с прозрачным фоном и округленное изображение:

convert profile.png -alpha set -background none -thumbnail 50x50^ -vignette 0x0 rounded_profile.png

Теперь мы можем получить округленные изображения для изображений профиля, добавив: округленный процессор в инициализатор dragonfly.rb, как показано ниже:

require 'dragonfly'

# Configure
Dragonfly.app.configure do
  plugin :imagemagick

  # Fictive secret no worries
  secret "64d123456dafb767892c1d28ca6d123456ea4cc373dac117d6d1123456a29d6e"

  url_format "/media/:job/:name"

  datastore :file,
    root_path: Rails.root.join('public/system/dragonfly', Rails.env),
    server_root: Rails.root.join('public')

  processor :rounded do |content, size|
    content.shell_update ext: 'png' do |old_path, new_path|
      "/usr/local/bin/convert #{old_path} -alpha set -background none -thumbnail #{size}^ -vignette 0x0 #{new_path}"
    end
  end
end

Обратите внимание, что вам, возможно, придется изменить путь к вашей команде конвертирования в зависимости от того, на какой платформе вы работаете, я нахожусь на Mac OS и ImageMagick устанавливается через Homebrew.

Теперь из любой модели с изображением, обработанным Dragonfly, вы можете позвонить:

a_model_instance.an_image.rounded('50x50').url

Чтобы вернуть округленное изображение размером 50 на 50 пикселей.

Другие вопросы по тегам