Обрезать круговое изображение с рельсами стрекозы
Я использую 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 пикселей.