Показать полную графическую версию : можно ли изменить ширину картинки посредством php?
например есть картинка размером 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)
а ктонибудь подсакажет откуда этот модуль скачать и как поставить под винд и линкс?
а с видио какнибудь php работает?
под win - "Как установить модуль GD для PHP" (http://www.forum.oszone.net/showthread.php?t=31199&highlight=gd)
как в Linux - как ставить будем? (компилим, пакеты, apt... )
для все случаев phpinfo(); (на предмет - не стоит ли уже :))
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!';
?>
ваУ, неожидал таких больших листингов:) спасип)
меня инересует как установить под unix модули php в часности gd,
как собстно компилить? или может готовое скачать откуда можно и чтото прописать в апач конфиги?
хелп.
php установлен как модуль к апачу
Prisoner
17-03-2005, 14:20
Доки тут (http://www.boutell.com/gd/manual2.0.33.html). Там же и скачать. В доках вариации: установить, обновить - выбираем по вкусу.
кстати вопрос все есче в силе: с видио работает какнибудь?
E-mail
Что подразумевается в работе с видео?
archy
при аплодиньи менять битрейд вставлять картинку логотип в видио и т.п.
Средствами php навряд ли, для этого нужно юзать внешние проги типа всяких dumpmpeg и различных кодеков-перекодеков :).
Но делать это при аплоаде, не лету... маразм, имхо.
archy при аплодиньи - образноговоря ;)
про внешние проги - знаем, юзвереем:)
вопрос открыт:]
E-mail
Юзай их из php (внешние проги) и вопрос будет закрыт, нет в php интерфейсов к таким прогам
никак не могу придумать алгоритм для изменения изображения..
т.е. мне нужно из любого изображения больше 400 пикселей по горизонтали сделать изображение 400 пикселей по горизонтали и по вертикали сколько получится в процентном соотношении, но как это процентное отношение посчитать? :not-me:
Prisoner
20-06-2005, 02:24
В шестом классе математики преподают пропорции, а по геометрии подобность треугольников. Т.к. треугольники подобны по двум сторонам и углу между ними, то:
iHeightNew = iWidthNew * iHeightOld / iWidthOld,
где
iHeightNew - высота нового прямоугольника
iWidthNew - ширина нового прямоугольника (=400)
iHeightOld - высота старого прямоугольника (getimagesize)
iWidthOld - ширина старого прямоугольника (getimagesize)
Prisonerчтото ты тут странное понаписал.
я с вопросом тоже с тормозил.
сделал все легко ширину разделил, потом высоту делил на результат.
но всеравно спасип
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.