ImageProcessing :: Ошибка при передаче аргумента обрезки в вариант - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть модель с 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

1 Ответ

4 голосов
/ 02 апреля 2020

Попробуйте my_model.file.variant(combine_options: { crop: '1440x560+580+120')

...