Изменение размера изображения при сохранении соотношения - PullRequest
1 голос
/ 28 января 2010

Я перечисляю фотографии, используя MySQL:

<?php
$a = mysql_query("select * from x");
?>
<?php while ($w=mysql_fetch_array($a)) { ?>
    <img src="<?=$w[url]?>" alt="<?=$w[name]?>" width="150" height="110" />
<? } ?>

Как мне сохранить пропорции? Изображение с размерами 150x500 пикселей становится очень искаженным. Как я могу это исправить?

Ответы [ 7 ]

3 голосов
/ 28 января 2010

Попробуйте что-то вроде этого:

$ratio = $height / $width;
$new_width = 150;
$new_height = $ratio * $new_width;
3 голосов
/ 28 января 2010

Вы можете получить размер изображения, используя php:

list($width, $height) = getimagesize($file);
3 голосов
/ 28 января 2010

Просто указав в HTML только ширину или только высоту, соотношение сохранится.

Или вы можете изменить размер ваших фотографий динамически с помощью сценария, такого как Smart Image resizer: http://shiftingpixel.com/2008/03/03/smart-image-resizer/

2 голосов
/ 28 января 2010

Просто укажите одно измерение (ширину или высоту, но не оба), и оно сохранит соотношение. С помощью CSS вы также можете указать только максимальная ширина и максимальная высота :

<img src="<?=$w[url]?>" alt="<?=$w[name]?>" style="max-width:150px; max-height:110px" />
1 голос
/ 28 января 2010

Вы можете использовать скрипт изменения размера для повторной выборки (изменения размера) изображения.

Хороший сценарий находится здесь: http://shiftingpixel.com/2008/03/03/smart-image-resizer/

Для использования:

<img src="/image.php?image=/img/test.jpg&amp;width=150&amp;height=500" alt="Test" />

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

1 голос
/ 28 января 2010

Установка и ширина и высота заставляет браузер изменить его размер в соответствии с тем, что вы говорите.

Установка только одного значения (ширина или высота) изменяет его размер, чтобы сохранить соотношение изображения.

Вы можете использовать функцию PHP getImageSize, чтобы получить фактическую ширину и высоту изображения, а затем изменить пропорциональное изменение размера на основе height / width = new_width / new_height

1 голос
/ 28 января 2010

Если вы просто укажете ширину, все браузеры (о которых я знаю ...) будут правильно масштабировать изображение.

Однако вы можете рассмотреть возможность создания миниатюр, если собираетесь загружать много изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...