Подтвердить что ты не робот

Rails Image Re-sizing на экране просмотра?

Как изменить размер существующего изображения, скажем, "260x180?"

Я использую Carrierwave и Rmagick в настоящее время для загрузки изображений в мое хранилище Amazon S3, и он создает 2 версии изображения: оригинал и большую версию (70x70).

Теперь я знаю, что я могу создать другую версию, чтобы были созданы три версии, включая 260x180, но я чувствовал, что это забивает базу данных хранилища, и мне было интересно, могу ли я сделать это на виду уровень.

Я пробовал

<%= image_tag(@syllabus.image_url, :size => "260x180") %> 

но похоже, что он не работает - изображения не одинаковые.

Кроме того, если изображение меньше моего желаемого результата, мне нужно сделать что-то другое, чем изображения, которые больше? Например, нужно ли вырезать большие, но развернуть меньшие, или автоматически будет масштабироваться до нужного размера?

4b9b3361

Ответ 1

Как @Yosep сказал, здесь нет ничего волшебного из рельсов. <%= image_tag %> генерирует тег <img> в результате html. если вы передадите :size => '260x180', тег <img> результата будет иметь свои значения width и height равными 260 и 180.

Вот ответ на ваш вопрос. лучший способ предоставить другой размер изображения - это то, как вы отклонили его в начале. Вам нужно изменить размеры этих изображений в бэкэнде и сохранить их где-нибудь.

Изменение размера изображения путем установки ширины и высоты тега <img> не приведет к сохранению исходного формата изображения. если исходное соотношение составляет 260: 180, то это нормально. Но если нет, результат будет уродлив. Кроме того, есть еще один недостаток этого, который по той же причине не должен изменять размер изображения с помощью CSS. Изменение размера больших изображений на более мелкие на стороне клиента в конечном итоге будет огромной тратой вашей сети, и это замедлит работу вашего сайта. Это один из правил YSlow.

Чтобы изменить размер изображения с помощью CSS, вы можете использовать max-width и max-height, размер больших изображений будет соответствующим образом изменен, меньшие будут не изменены.

Ответ 2

Все Rails при просмотре кода обращаются к

<%= image_tag(@syllabus.image_url, :size => "260x180") %>

во что-то вроде

<image tag="image.jpg" width="260" height="190" ../>

на странице (HTML).

Тем не менее, если ваш код не похож на работу, попробуйте присвоить ему класс CSS:

.image-size {
  max-width: 300px;
  max-height: 200px;
}

Ответ 3

В представлении, без обработки нового изображения? По соглашению, вы бы использовали CSS.

.image_container img {
  width: 260px;
  height: 180px
}

И вот несколько интересных способов обрезать CSS: http://cssglobe.com/post/6089/3-easy-and-fast-css-techniques-for-faux-image

Ответ 4

Если вы хотите, вы можете использовать автоматическое изменение размера изображения в облаке. Например, следующая команда изменит размер изображения, чтобы заполнить прямоугольник 260x180.

<%= cl_image_tag("my_image.png", :size => "260x180", :crop => :fill) %>

В этом сообщении говорится о том, как использовать CarrierWave, пока все изображения хранятся в облаке, передаются через быстрый CDN, и все преобразования динамически выполняются в облаке (нет необходимости устанавливать RMagick).