измените размер изображения до точного размера, сохраните внешний вид и заполните любое пространство в php


Хай,

Допустим, я хочу преобразовать изображение в точный размер, например: 400x300. Хитрость в том, что если изображение из-за его соотношения сторон не помещается в 400x300, то поместите его туда с черными рамками.

Изображение размером 900x1200 будет преобразовано в 225x300, чтобы сохранить его соотношение сторон, а затем с черными рамками слева и справа, чтобы сделать его размером 400x300.

Оригинальное фото:

|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  
|||||||||||||||||||||||  

После изменения размера я хочу выглядеть примерно так:

_______________________
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|+++++++||||||||++++++|
|+++++++||||||||++++++|
|+++++++++++++++++++++|
|+++++++++++++++++++++|
|_____________________|

В: "+++++++" я хочу быть какого-то цвета, а "|||||||" - это изображение, посередине!

К сожалению, у меня пока нет никакого кода!

Я хочу что-то вроде этого: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php#x22 спасибо

Author: robertdd, 2010-07-09

3 answers

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

Вам нужно будет прочитать изображение, используя одну из функций imagecreatefrom.... Затем вам нужно будет создать второе изображение, используя, например, imagecreatetruecolor, который вы заполняете выбранным вами цветом. Затем вы копируете исходное изображение в новое изображение с помощью imagecopyresampled, что позволяет вам изменять его размер в процессе. Вам нужно будет рассчитать новый размер с помощью простой математики заранее, который функционирует как getimagesize могу помочь вам с этим.

В качестве альтернативы, поиграйте с классом ImageMagick, который является альтернативой gd, с которым вам может быть легче работать, а может и нет.

Желаю удачи!:)

 3
Author: deceze, 2010-07-09 02:12:02

Создайте 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;
}
 0
Author: Jeffrey Blake, 2010-07-09 02:09:45

Я большой поклонник редактирования и изменения размеров изображений заранее, чтобы они были того размера, который я хочу, а не устанавливали ширину и высоту при отрисовке. Производительность выше, и вам не нужно беспокоиться о том, как разные браузеры могут обрабатывать ее по-разному.

Поэтому, если у вас нет программы для редактирования изображений, получите Paint.net . Бесплатный и хорошо работает.

 -2
Author: JBrooks, 2010-07-09 01:54:52