Войти

Показать полную графическую версию : можно ли изменить ширину картинки посредством php?


E-mail
13-03-2005, 00:05
например есть картинка размером 1024 на *
мы обычно лезем в фотожоп кс и меняем его на 300 например и высоту какая получится,
а можноли это автоматизировать через php?

т.е. например при аплодиньи картинок на сервер чтобы они уменьшались?

vadimiron
13-03-2005, 00:18
Читаем про библиотеку GD, в основном, она везде поддерживается (я имею в виду хостинг с PHP)
В мануале функции этой библиотеки стоят в главе "Функции изображений"
В данном конкретном случае можно например использовать imagecopyresized(), эта функция не только меняет размеры, но ещё при этом следит и за качеством (которое может испортиться при изменении размеров картинки)

Официальная страница (http://www.boutell.com/gd/) этой библиотеки, но в интернете есть туториалы, в том числе и конкретное использование вместе с PHP, например тут (http://www.opennet.ru/base/dev/php_gd.txt.html)

E-mail
13-03-2005, 01:45
а ктонибудь подсакажет откуда этот модуль скачать и как поставить под винд и линкс?

E-mail
13-03-2005, 01:46
а с видио какнибудь php работает?

mar
13-03-2005, 20:41
под win - "Как установить модуль GD для PHP" (http://www.forum.oszone.net/showthread.php?t=31199&highlight=gd)
как в Linux - как ставить будем? (компилим, пакеты, apt... )
для все случаев phpinfo(); (на предмет - не стоит ли уже :))

KGB
14-03-2005, 02:18
E-mail
Есть куча б/скриптов для этого.

Вот например (с _php5.ru)

<?php
/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
$src - имя исходного файла
$dest - имя генерируемого файла
$width, $height - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
$rgb - цвет фона, по умолчанию - белый
$quality - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;

$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];

$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);

$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);

imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}
?>


Использование

<?php

require ('imgresize.php');
if (img_resize('original.jpg', 'small.jpg', 100, 60)) // 100 - новая ширина 60 - высота
echo 'Image resized OK';
else
echo 'Resize failed!';

?>


А это тоже самое, но размер меняется в % (слегка переделал для своих нужд)

<?php
function img_resize($src, $dest, $new_size, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;

if($new_size>100) $new_size=40;// эту строчку можно убрать, если надо увеличивать
$width= $size[0]* $new_size/100;
$height=$size[1]* $new_size/100;


$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];

$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);

$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);

imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}
?>

Соответственно использование

<?php

require ('imgresize.php');
if (img_resize('original.jpg', 'small.jpg', 60)) // здесь 60 - это проценты от оригинала
echo 'Image resized OK';
else
echo 'Resize failed!';

?>

E-mail
14-03-2005, 17:17
ваУ, неожидал таких больших листингов:) спасип)

меня инересует как установить под unix модули php в часности gd,
как собстно компилить? или может готовое скачать откуда можно и чтото прописать в апач конфиги?
хелп.

php установлен как модуль к апачу

Prisoner
17-03-2005, 14:20
Доки тут (http://www.boutell.com/gd/manual2.0.33.html). Там же и скачать. В доках вариации: установить, обновить - выбираем по вкусу.

E-mail
06-06-2005, 02:53
кстати вопрос все есче в силе: с видио работает какнибудь?

archy
07-06-2005, 12:55
E-mail
Что подразумевается в работе с видео?

E-mail
08-06-2005, 00:43
archy
при аплодиньи менять битрейд вставлять картинку логотип в видио и т.п.

archy
08-06-2005, 12:30
Средствами php навряд ли, для этого нужно юзать внешние проги типа всяких dumpmpeg и различных кодеков-перекодеков :).
Но делать это при аплоаде, не лету... маразм, имхо.

E-mail
08-06-2005, 20:25
archy при аплодиньи - образноговоря ;)

про внешние проги - знаем, юзвереем:)

вопрос открыт:]

archy
08-06-2005, 21:58
E-mail
Юзай их из php (внешние проги) и вопрос будет закрыт, нет в php интерфейсов к таким прогам

E-mail
19-06-2005, 15:33
никак не могу придумать алгоритм для изменения изображения..
т.е. мне нужно из любого изображения больше 400 пикселей по горизонтали сделать изображение 400 пикселей по горизонтали и по вертикали сколько получится в процентном соотношении, но как это процентное отношение посчитать? :not-me:

Prisoner
20-06-2005, 02:24
В шестом классе математики преподают пропорции, а по геометрии подобность треугольников. Т.к. треугольники подобны по двум сторонам и углу между ними, то:
iHeightNew = iWidthNew * iHeightOld / iWidthOld,
где
iHeightNew - высота нового прямоугольника
iWidthNew - ширина нового прямоугольника (=400)
iHeightOld - высота старого прямоугольника (getimagesize)
iWidthOld - ширина старого прямоугольника (getimagesize)

E-mail
20-06-2005, 02:49
Prisonerчтото ты тут странное понаписал.
я с вопросом тоже с тормозил.
сделал все легко ширину разделил, потом высоту делил на результат.

но всеравно спасип




© OSzone.net 2001-2012