У меня есть модель с has_one_attached :file
, которую я хочу обработать с помощью пользовательского параметра crop
. Прикрепленный файл представляет собой фотографию в формате jpg, которую я использую для тестирования.
Раньше я масштабировал и обрезал изображения таким образом, что работает должным образом.
my_model.file.variant(resize_to_fill: [1440, 560, { gravity: 'Center' }])
Теперь я хотел измените центр / точку фокусировки для обрезки изображения в пользовательскую позицию. Обычная команда imagemagick будет convert input.jpg -crop 1440x560+580+120 output.jpg
и будет работать так, как и предполагалось в командной строке.
В документе указано, что вы можете передать почти любой коммант imagemagick в .variant()
, что заставляет меня попробовать это:
my_model.file.variant(crop: '1440x560+580+120')
Возникает следующая ошибка:
ImageProcessing::Error - Source format is multi-layer, but destination format is
single-layer. If you care only about the first layer, add `.loader(page: 0)` to
your pipeline. If you want to process each layer,
see https://github.com/janko/image_processing/wiki/Splitting-a-PDF-into-multiple-images
or use `.saver(allow_splitting: true)`.
Я прочитал руководство по image_processing и понимаю, как работает конвейер, но мне не хватает части, где / как адаптировать конвейер через .variant()
чтобы получить результат.
Я что-то здесь не так делаю или просто пропускаю какую-то простую часть? В противном случае я бы go смог написать его в необработанном виде с помощью конвейера image_processing и обойти его.
Моя среда состоит из:
- rails - v6.0.2.2
- mini_magick gem - v4.10.1
- image_processing gem - v1.10.3
- ImageMagick 7.0.8-66