Избегайте растягивания фотографий - PullRequest
2 голосов
/ 01 июня 2011

Как я могу избежать растяжения моих фотографий? PHP выбирает 2 случайные фотографии из папки и отображает их, используя echo. Но сейчас все фотографии в портрете растянуты.

<?php if(!empty($images)) {
    $rand_key = array_rand($images, 1);
    $src = $images[$rand_key];
    echo "<img class=\"flickrphoto\" src='".$src."' align='absmiddle'>";

    unset($images[$rand_key]);
    $rand_key = array_rand($images, 1);
    $src = $images[$rand_key];
    echo "<img class=\"flickrphoto\" src='".$src."' align='absmiddle'>";
} else {
    echo 'Error';
} ?>

И CSS:

.flickrphoto {
    max-width: 100px;
    max-height: 100px;
    overflow: hidden;
}

** РЕДАКТИРОВАТЬ **
Текущий код:

   // protrait calculations;
    $size = getimagesize($images_folder_path);
    if($size[0] < $size[1]) {
        $orientation = 'portrait';
    } else {
        $orientation = 'landscape';
    }

Ответы [ 4 ]

5 голосов
/ 01 июня 2011

Я бы просто проверил, является ли ориентация protrait или нет, и добавил бы класс css;

<?php if(!empty($images)) {
$rand_key = array_rand($images, 1);
$src = $images[$rand_key];

// protrait calculations;
$fullpath = // statement to fetch the path on the server
$size = getimagesize($fullpath);
if($size[0] < $size[1]) {
   $orientation = 'portrait';
} else {
   $orientation = 'landscape';
}

echo "<img class=\"flickrphoto ". $orientation ."\" src='".$src."' align='absmiddle'>";

unset($images[$rand_key]);
$rand_key = array_rand($images, 1);
$src = $images[$rand_key];
echo "<img class=\"flickrphoto\" src='".$src."' align='absmiddle'>";
} else {
    echo 'Error';
} ?>

и в вашем css что-то вроде этого:

img.flickrphoto {
    max-width: 100px;
    max-height: 100px;
    overflow: hidden;
}
img.flickrphoto.portrait {
    max-width: 50px;
}
2 голосов
/ 01 июня 2011

Вот хорошая статья о том, как поддерживать соотношение сторон с помощью CSS и HTML:

http://haslayout.net/css-tuts/CSS-Proportional-Image-Scale

Также есть вопрос SO, который дает пару идей о том, как это сделать.это также:

HTML - отображать максимально возможное изображение при сохранении соотношения сторон

В основном вам необходимо масштабировать либо высоту, либо ширину, но не оба.1012 *

0 голосов
/ 01 июня 2011

используйте php-функции imagesx и imagesy и передайте возвращаемые значения в качестве атрибутов ширины и высоты тега image.

0 голосов
/ 01 июня 2011

отображать их в качестве фона <div> вместо <img>

как это:

echo "<div class=\"flickrphoto\" style='background: url(".$src.");'></div>";
...