2015-03-17 13 views
0

У меня есть приложение для рельсов 4, где я разрешаю пользователям загружать изображения. У меня есть валидации для минимального размера 640X385 и, следовательно, минимальное соотношение сторон 1,6623376623376624. Теперь это означает, что пользователь не может загружать меньшие изображения с точки зрения размера или соотношения сторон. И когда они загружают более крупное изображение, оно изменяется с помощью метода resize_to_fit ImageMagick. Но он изменяется пропорционально ширине и высоте, и проверка моего измерения не удалась. Если я использую resize_to_fill, даже более мелкие изображения получают растянутую и обходную пропорцию. Итак, как мне получить способ изменения размера для изменения размера изображения до 640X385?Carrierwave: изменение размера изображения до фиксированной ширины и высоты

+0

Скажите, какие результаты вы ожидаете, если вы измените размер изображения 1000x1000 на 640x385? –

+0

Я в основном хочу, чтобы resize_to_fit запускал, прежде чем манипулировать! в классе MyImageUploader

+0

Вы мне не ответили. Я спросил вас, как это будет выглядеть *, вы сказали мне, когда это будет обработано. –

ответ

0

Так что я точно не знаю, какого результата вы ожидаете для разных размеров. Я предпочитаю использовать ImageMagick в командной строке, так что я подготовил небольшой скрипт с примерами, которые могут или не могут помочь вам:

#!/bin/bash 

# cleanup 
rm *.jpg 

# as expected 
convert -size 640x385 xc:white img0.jpg 
# bigger aspect ratio (2.0) 
convert -size 800x400 xc:white img1.jpg 
# lower aspect ratio (1.0) 
convert -size 800x800 xc:white img2.jpg 
# bigger aspect ratio (2.0) but to small 
convert -size 400x200 xc:white img3.jpg 
# lower aspect ratio (1.0) but to small 
convert -size 200x200 xc:white img4.jpg 

for img in img*; do 
    # resize images to fit in box but keep aspect ratio 
    convert ${img} -resize 640x385 r1.${img} 
    # resize images keeping the aspectratio to fit in box. But only shrink 
    # images, images that are to small is not enlarged. 
    convert ${img} -resize 640x385\> r2.${img} 
    # resize images ignoring the aspectratio to fit in box. But only shrink 
    # images, images that are to small is not enlarged. 
    convert ${img} -resize 640x385\>\! r3.${img} 
done 

identify -format "%f: %w %h\n" *.jpg 

Выход следующим образом:

img0.jpg: 640 385 
img1.jpg: 800 400 
img2.jpg: 800 800 
img3.jpg: 400 200 
img4.jpg: 200 200 
r1.img0.jpg: 640 385 
r1.img1.jpg: 640 320 
r1.img2.jpg: 385 385 
r1.img3.jpg: 640 320 
r1.img4.jpg: 385 385 
r2.img0.jpg: 640 385 
r2.img1.jpg: 640 320 
r2.img2.jpg: 385 385 
r2.img3.jpg: 400 200 
r2.img4.jpg: 200 200 
r3.img0.jpg: 640 385 
r3.img1.jpg: 640 385 
r3.img2.jpg: 640 385 
r3.img3.jpg: 400 200 
r3.img4.jpg: 200 200 

Я предполагаю, что вы ища последний вариант, где результат называется r3.<something>.

Для получения дополнительной информации и хороших примеров того, как использовать изменение размера: http://www.imagemagick.org/Usage/resize/

также посмотреть на: Resizing the image with padding using convert on ubuntu

Я надеюсь, что это помогает.

Смежные вопросы