Фото разных размеров, как сделать через css, что бы определенная область фото показыв

L
На сайте с 18.02.2012
Offline
83
6082

Делаю красивый вывод фото, все знают что фото разные, вытянутые по вертикали или по горизонтали или вообще квадратные.

Пример фоток

Сайт на кохане, жопустим загружаем мы фото, все загрузилось, вставилось сам вывод фото можно изменить через css, но если .class img {366px; height: 250px;} задать размеры фотке то она будет искажаться, что не есть хорошо.

Как можно реализовать вот так, та часть что прозрачная приячиться. и показываем определнную часть которая задана через css по размерам width: 366px; height: 250px;

Читать что много есть вариантов.

Я реализовал так:

у самих фото размер сторон не ниже чем 500px, то есть ни одна сторона не ниже чем 500px

css


.apartfoto {
border: 1px solid #FFDDEF;
width: 366px;
height: 250px;
overflow: hidden;
margin: 10px;
-webkit-border-radius: 8px;
-o-border-radius: 8px;
-html-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
}

.apartfoto img{
width: 366px;
height: 250px;
-webkit-border-radius: 8px;
-o-border-radius: 8px;
-html-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
}

HTML

<div class="apartfoto">

<img style="background: url(/media/uploads/quarters/<? echo ($quarter['main_img']) ? 'small_'.$quarter['main_img'] : 'apartnofoto.jpg'; ?>) center center">

</div>

style="background: url(...........) center center">

center - показывает центр фотографии заданным по параметрам

width: 366px;

height: 250px;

а сама фотка 500px на 600px или 500px на 500px

все отлично работает, но есть одно но, не показывает фото в фаерфоксе, в опере есть, в ie есть, в хроме есть.

Как все это выглядит:

Может как то по другому можно реализовать задачу ?

Вот еще вариант, но работает не ровно по центру и минус в том что бордер закруглены края не работает.

вариант с центрованием

.apartfoto {

width: 366px;

height: 250px;

overflow: hidden;

border: 1px solid #FFDDEF;

margin: 10px;

-webkit-border-radius: 8px;

-o-border-radius: 8px;

-html-border-radius: 8px;

-moz-border-radius: 8px;

border-radius: 8px;

}

.apartfoto img {

top: 50%;

margin-top: -100px;

left: 50%;

margin-left: -100px;

max-width: 500px;

max-height: 500px;

}

J
На сайте с 21.10.2013
Offline
4
#1

если у вас кохана, то не мучтесь с CSS и спокойно выводите в шаблонах через

$image->resize($width, $height)
или
$image->crop($width, $height)

подробнее читайте в мануалах

Автопостинг вконтакте (http://postio.ru/p/5591) - 1 пост всего 0,99 руб! Готовая база тематик!
L
На сайте с 18.02.2012
Offline
83
#2
jount:
если у вас кохана, то не мучтесь с CSS и спокойно выводите в шаблонах через

$image->resize($width, $height)
или
$image->crop($width, $height)


подробнее читайте в мануалах

вы наверное не поняли, я таким способом буду задавать параметры фотке, и они не все нормально будут смотреться, они будут искаженные или вытянутые.

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#3

Пример чистой страницы покажите полностью, которая в FF не показывается.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
vlad00777
На сайте с 24.12.2009
Offline
119
#4

l17l, поэтому вам и написали второй вариант.

Нужно чтоб картинка обрезалась, а не сжималась. Это называется crop. Ищите у себя в движке нечто подобное или же как сказал jount, используйте:

jount:
$image->crop($width,$height)
Верстка. Качественно! Адаптивная, резиновая, с параллаксом и прочими плюшками. В ЛС.
L
На сайте с 18.02.2012
Offline
83
#5
vlad00777:
l17l, поэтому вам и написали второй вариант.
Нужно чтоб картинка обрезалась, а не сжималась. Это называется crop. Ищите у себя в движке нечто подобное или же как сказал jount, используйте:

объяснит суть работы данного способа.

то есть через код этот, указываем ширину и высоту, ту которую он будет показывать из картинки, то есть он её не сжимает, не задает параметры картинке, а просто показывает область из картинки ту которую указал в ширину и высоту так ?

J
На сайте с 21.10.2013
Offline
4
#6
l17l:

то есть через код этот, указываем ширину и высоту, ту которую он будет показывать из картинки, то есть он её не сжимает, не задает параметры картинке, а просто показывает область из картинки ту которую указал в ширину и высоту так ?

Смотрите.

Исходные данные: картинка 1200х800 например.

Нужно: урезанная картинка 350х350 с сохранением пропорций.

1) С помощью PHP узнаем наибольшую сторону (т.е. ширина это или высота). Например, с помощью такой функции:

$size = getimagesize($filename);

Смотрите, какие размеры картинки есть внутри $size, анализируете их и вычисляете что больше - ширина, или высота. (Т.е. другими словами, картинка горизонтально- или вертикально-ориентирована)

2) Сжимаем картинку


$image->resize(350, NULL); // Если бОльшая сторона - это ширина.
// или
$image->resize(NULL, 350); // Если бОльшая сторона - это высота.

На этом шаге получаем картинку, готовую к обряду обрезания.

3) Делаем собственно обрезание (crop):

$image->crop(350,350); 

Итого можете использовать в цепочке:


print $image->resize(350, NULL)->crop(350,350);

С вычислением высоты, ширины картинки и прочими мелочами предоставляю разобраться вам, там по идее ничего сложного не должно быть.

UPD: еще в интернетах пишут, что данный код избавит вас от забот вручную проверять ориентацию картинки (лично не проверял, но попробуйте):

print $image->resize(350, 350, Image::INVERSE)->crop(350,350);

Надеюсь, чем-то помог :)

L
На сайте с 18.02.2012
Offline
83
#7
jount:
Смотрите.

Исходные данные: картинка 1200х800 например.
Нужно: урезанная картинка 350х350 с сохранением пропорций.

1) С помощью PHP узнаем наибольшую сторону (т.е. ширина это или высота). Например, с помощью такой функции:
$size = getimagesize($filename);

Смотрите, какие размеры картинки есть внутри $size, анализируете их и вычисляете что больше - ширина, или высота. (Т.е. другими словами, картинка горизонтально- или вертикально-ориентирована)
2) Сжимаем картинку


$image->resize(350, NULL); // Если бОльшая сторона - это ширина.
// или
$image->resize(NULL, 350); // Если бОльшая сторона - это высота.

На этом шаге получаем картинку, готовую к обряду обрезания.
3) Делаем собственно обрезание (crop):
$image->crop(350,350); 


Итого можете использовать в цепочке:

print $image->resize(350, NULL)->crop(350,350);


С вычислением высоты, ширины картинки и прочими мелочами предоставляю разобраться вам, там по идее ничего сложного не должно быть.
UPD: еще в интернетах пишут, что данный код избавит вас от забот вручную проверять ориентацию картинки (лично не проверял, но попробуйте):
print $image->resize(350, 350, Image::INVERSE)->crop(350,350);


Надеюсь, чем-то помог :)

так по идее скрипт должен сначала 1200х800 этот размер уменьшить на тот что мне нужен 500x500, ну и по сути он обрежет лишнее, а потом уже что бы из этих данных покащывалась область та что мне нужна 366x250

так как если он будет показывать область из 1200х800, то то там ничего видно не будет.

вот пример:

фотка 1200x960, если сделать что бы из неё область та что мне надо показывалась, то вид будет такой.

можно сделать что бы скрипт обрезал фото, но так будет не красиво, он вырежет область из большой фотки 366x250, ну и будет видно выше на картинки что он будет показвать что то не понятное, тут надо делать что бы скрипт уменьшал фото до 500x500 ну и обрезал за одно если будет лишнее, так как фото все разные что по вертикали что по горизонтали и придеться скрипты обрезать, нужно что бы как бы он от середины отсчитывал что лишнее и вырезал, допустим загружаем и скрипт делает фотку 1200x960 на 500x500, можно меньше но не то будет все равно, и уже исходя из 500x500 размера, показываем область, 366x250 и вот пример:

а если сделать так что бы скрипт уменьшал по ширине, до 366 и если есть лишка в длине то что бы срезал и меньшал до 250, то будет так.

у всех фотографиий восновном все самое ценное середина, допустим взять фотку с человеком, обычно человек по середине.

---------- Добавлено 08.01.2014 в 20:39 ----------

вот нашел по кохане, http://ruslan.cc/2012/11/kohana-3-2-2-i-ispolzovanie-modulya-image/

я думаю так и сделаю без всяких там css, так и фотка меньше весить будет !

а как быть если он обрежет по ширине и так выйдет что высота будет меньше чем 250, тогда обрезать не будет и фотка будет смотреться уже не хорошо ! косяк как с ним быть ? или сделать что бы обрезалось ровно все стороны по 366x366 и сделать что бы показывалась по центру фотка.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий