измените размер изображения до точного размера, сохраните внешний вид и заполните любое пространство в php
Хай,
Допустим, я хочу преобразовать изображение в точный размер, например: 400x300. Хитрость в том, что если изображение из-за его соотношения сторон не помещается в 400x300, то поместите его туда с черными рамками.
Изображение размером 900x1200 будет преобразовано в 225x300, чтобы сохранить его соотношение сторон, а затем с черными рамками слева и справа, чтобы сделать его размером 400x300.
Оригинальное фото:
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
После изменения размера я хочу выглядеть примерно так:
_______________________
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++||||||||++++++|
|+++++++||||||||++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|_____________________|
В: "+++++++" я хочу быть какого-то цвета, а "|||||||" - это изображение, посередине!
К сожалению, у меня пока нет никакого кода!
Я хочу что-то вроде этого: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php#x22 спасибо
3 answers
Познакомьтесь с 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 . Бесплатный и хорошо работает.