2010-07-09 4 views
2

Hy,изменить размер изображения до точного размера, сохранить аспект, и заполнить любое пространство в PHP

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

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

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

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

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

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

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

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

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

+0

показать настоящую фотографию. Я не понимаю, о чем вы спрашиваете. – VOX

+1

Вы не задали вопрос (если вы не хотите, чтобы люди просто писали код для вас), поэтому большинство советов, которые я могу предложить, это использовать графическую библиотеку, такую ​​как ImageMagick или GD. –

+0

Расчет соотношения сторон должен серьезно относиться к наименьшей степени, это простая математика, которую вы должны быстро найти. Большая проблема заключается в том, что вы не знаете, с чего начать, это правильно? – deceze

ответ

3

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

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

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

Удачи! :)

+0

@robertdd Существует множество примеров кода для каждой функции, пример для ['imagecopyresampled'] (http://php.net/manual/en/function.imagecopyresampled.php) - это в точности то, что вы ищете. – deceze

-2

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

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

+1

Я хочу, чтобы это было сделано в php! – robertdd

+0

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

0

Создайте 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

Мне нужно сохранить фотографию, не только для ее отображения – robertdd

+0

Хорошее мышление. Не нужно тратить полосы пропускания на сплошную bg - особенно если изображение будет выводиться в сжатом формате JPEG, что делает сплошные цвета выглядят ужасно. Если вам нужно сохранить его, тогда я буду придерживаться PNG или SVG (SVG будет менее поддерживаться, но сделает его наиболее эффективным). –

+0

Возможно, вы не можете тратить полосу пропускания на солидный фон, но вы по-прежнему загружаете потенциально массивное изображение, которое браузер просто уменьшает до 400x300. Который, скорее всего, тратит больше полосы пропускания, чем бит черной границы. – deceze