CarrierWave を使用しており、画像のサイズを幅 220px、最大高さ 220px に変更したいと考えています。私が使用process :resize_to_fit => [220,220]
すると、幅が220pxではない可能性があります。私に何ができる?
質問する
1498 次
2 に答える
3
質問を正しく解釈すると:
縦長の画像 (幅 480 ピクセル、高さ 640 ピクセルなど) の場合、幅 220 ピクセルに縮小してから、高さ 220 ピクセルにトリミングすると、正方形の画像になります。
横長の画像の場合は、幅を 220 ピクセルに縮小します (したがって、高さは 220 ピクセル未満になります)。
そうであれば、次の 2 段階のプロセスが必要です。
- アスペクト比を維持したまま、幅 220px にサイズ変更します
- 高さ 220px にトリミング (縦長の場合)
manipulate!
コマンドを使用して独自のプロセッサを作成することで、これを行うことができます(インスピレーションについては、 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
于 2013-01-09T15:23:32.500 に答える
2
Andy Hの回答の改善:
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
于 2013-01-09T19:25:30.023 に答える