CarrierWave - настройка ширины и максимальной высоты изображений

I use CarrierWave and I want to resize the images to a width of 220px and a max-height of 220px. If I use process :resize_to_fit => [220,220] it could be that the width is not 220px. What can I do?

0
nl ja de

2 ответы

Если я правильно интерпретирую вопрос:

  • для портретного изображения (скажем, 480px wide, 640px high), вы хотели бы масштабировать его до 220px в ширину, а затем обрезать его до 220px, что приведет к квадратному изображению.

  • для ландшафтного изображения вы хотели бы масштабировать его до 220px в ширину (поэтому высота будет меньше 220px).

Если это так, вам нужен двухэтапный процесс:

  1. Изменить размер до 220 пикселей, сохраняя соотношение сторон
  2. Обрезать до 220px в высоту (если портрет)

Вы можете сделать это, написав собственный процессор с помощью команды manageulate! (см. собственный CarrierWave для некоторого вдохновения).

Я думаю, это примерно то, что вы после

process :resize => [220, 220]

protected

def resize(width, height, gravity = 'Center')
  manipulate! do |img|
    img.combine_options do |cmd|
      cmd.resize width.to_s
      if img[:width] < img[:height]
        cmd.gravity gravity
        cmd.background "rgba(255,255,255,0.0)"
        cmd.extent "#{width}x#{height}"
      end
    end
    img = yield(img) if block_given?
    img
  end
end
3
добавлено
Ах. Затем измените его на "# {width}" или width.to_s .
добавлено автор Andrew Haines, источник
Хорошо, я думаю, это потому, что я забыл вернуть изображение из блока.
добавлено автор Andrew Haines, источник
Он говорит, что не может преобразовать Fixnum в String в строку cmd.resize width .
добавлено автор ijo, источник
Но затем он говорит undefined method 'write' for "": String
добавлено автор ijo, источник

Улучшение ответа Энди Х:

process :resize => [220, 220]

protected

def resize(width, height, gravity = 'Center')
  manipulate! do |img|
    img.combine_options do |cmd|
      cmd.resize "#{width}"
      if img[:width] < img[:height]
        cmd.gravity gravity
        cmd.background "rgba(255,255,255,0.0)"
        cmd.extent "#{width}x#{height}"
      end
    end
    img = yield(img) if block_given?
    img
  end
end
2
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff