Изменить размер изображения до точного размера, сохранить аспект и заполнить любое пространство в php
Гип,
Допустим, я хочу преобразовать изображение в точный размер, например: 400x300. Хитрость в том, что если изображение из-за его соотношения сторон не умещается в 400x300, то поместите его туда с черными рамками.
Изображение 900x1200 будет преобразовано в формат 225x300, чтобы сохранить его соотношение сторон, а затем получит черные границы влево и вправо, чтобы сделать его 400x300.
оригинальное фото:
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
после изменения размера я хочу выглядеть примерно так:
_______________________
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++||||||||++++++|
|+++++++||||||||++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|_____________________|
the: "+++++++" я хочу быть какого-то цвета, а "|||||||" это изображение, в середине!
к сожалению, у меня еще нет кода!
я хочу что-то вроде этого: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php спасибо
3 ответа
Познакомиться с gd
функции, которые позволяют манипулировать изображениями.
Вам нужно будет прочитать изображение, используя один из imagecreatefrom...
функции. Затем вам нужно будет создать второе изображение, используя, например, imagecreatetruecolor
, который вы заполняете своим цветом по выбору. Затем вы копируете оригинальное изображение в новое изображение, используя imagecopyresampled
, что позволяет изменить его размер в процессе. Вам нужно будет заранее рассчитать новый размер с помощью простой математики, которая работает как getimagesize
может помочь вам
Или поиграйте с классом ImageMagick, который является альтернативой gd
Вы можете или не можете найти легче работать с.
Удачи!:)
Создайте div, стилизованный под черный фон размером 400x300. Затем покажите свое измененное изображение внутри этого div. Вы даже можете включить проверку, чтобы убедиться, что изображение не является нужным аспектом, прежде чем показывать div.
Что-то вроде этого:
<?
$height-ratio = $height / 300;
$width-ratio = $width / 400;
if ($height-ratio == $width-ratio) {
$ratio = $height-ratio;
} elseif ($height-ratio > $width-ratio) {
$ratio = $height-ratio;
echo "<div class='blackbox'>";
} else {
$ratio = $width-ratio;
echo "<div class='blackbox'>";
}
$newHeight = $height / $ratio;
$newWidth = $width / $ratio;
echo "<img src='".$imgSrc."' height='".$newHeight."' width='".$newWidth."' />";
if ($height-ratio != $width-ratio)
echo "</div>";
?>
С поддержкой CSS:
.blackbox {
text-align: center;
background-color: black;
height: 300px;
width: 400px;
}
Я большой поклонник редактирования и изменения размеров изображений заранее, чтобы они соответствовали желаемому размеру, а не настраивал ширину и высоту, когда они отображаются. Производительность выше, и вам не нужно беспокоиться о том, как разные браузеры могут по-разному с этим справляться.
Так что, если у вас нет программы для редактирования изображений, получите Paint.net. Бесплатно и хорошо работает.