Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение размеров изображения

Автор: mike, www.codenet.ru
25 июня 2005 года

Как таковой, функции изменения размеров изображения в библиотеке GD нет. Есть две функции копирования части одного изображения в другое с изменением размеров копируемой части. Это функции imagecopyresized() и imagecopyresampled().

Функция imagecopyresampled() появилась в библиотеке GD с версии 2.0.1 и отличается от imagecopyresampled() тем, что при изменении размеров плавно интерполируются значения цветов в точках изображения. Это отличие хорошо иллюстрируют следующие рисунки:


Оригинал


imagecopyresize() - изображение уменьшено в три раза


imagecopyresample - изображение уменьшено в три раза()

Об ограничениях на работу функции imagecopyresampled() с палитровыми изображениями в документации по PHP ничего не сказано. Более того, там есть сноска, в которой описываются проблемы, возникающие с палитровыми изображениями. Из этого можно было бы сделать вывод, что функция работает с такими изображениями, но, просмотрев исходный код функции я убедился в обратном:

if (!dst->trueColor) {
    gdImageCopyResized (dst, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
    return;
}

В примерах мы будем использовать функцию imagecopyresampled(), но если у вас более старая версия GD, то просто замените "resampled" на "resized".

Пример 33: Функция изменяющая размер изображения.

<?
function imageresize($outfile,$infile,$neww,$newh,$quality) {

    $im=imagecreatefromjpeg($infile);
    $im1=imagecreatetruecolor($neww,$newh);
    imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));

    imagejpeg($im1,$outfile,$quality);
    imagedestroy($im);
    imagedestroy($im1);
    }

imageresize("","webcam.jpg",320,240,75);

?>

В данном примере не задано имя выходного файла. Это не ошибка. При использовании пустого имени файла, данные перенаправляются в стандартный вывод.

Пример 34: Изменение размеров изображения с заданным коэффициентом.

<?
function imageresize($outfile,$infile,$percents,$quality) {
    $im=imagecreatefromjpeg($infile);
    $w=imagesx($im)*$percents/100;
    $h=imagesy($im)*$percents/100;
    $im1=imagecreatetruecolor($w,$h);
    imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));

    imagejpeg($im1,$outfile,$quality);
    imagedestroy($im);
    imagedestroy($im1);
    }

imageresize("","webcam.jpg",30,75);

?>

Иногда необходимо вписать новое изображение в определенные рамки, например как на сервере fota.mota.ru. В таком случае можно воспользоваться следующей функцией:

Пример 35: Изменение размеров изображения с вписыванием в рамки

<?
function imageresize($outfile,$infile,$neww,$newh,$quality) {
    $im=imagecreatefromjpeg($infile);
    $k1=$neww/imagesx($im);
    $k2=$newh/imagesy($im);
    $k=$k1>$k2?$k2:$k1;

    $w=intval(imagesx($im)*$k);
    $h=intval(imagesy($im)*$k);

    $im1=imagecreatetruecolor($w,$h);
    imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));

    imagejpeg($im1,$outfile,$quality);
    imagedestroy($im);
    imagedestroy($im1);
    }

imageresize("","webcam.jpg",640,240,75);

?>

Ссылки по теме


Назад | Оглавление | Далее

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
+3 / -0
Мне нравитсяМне не нравится
20 апреля 2006, 18:33:59
header('Content-type: image/jpeg');

function imageresize($outfile,$infile,$percents,$quality) {
$im=imagecreatefromjpeg($infile);
$w=imagesx($im)*$percents/100;
$h=imagesy($im)*$percents/100;
$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));

imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}

$d=opendir("img/user/");
while(($e=readdir($d)) !==false) {
if (!ereg("^(.*)\\.(jpg)$",$e,$P)) continue;
$patche="img/user/$e";

$foto = imageresize("","$patche",75,75);
echo ("<img src='" . $foto. "'>"."<BR>");

}

По идее этот скрипт создает функцию сжатия, потом ищет все файлы JPEG и
должен вывести все фото на экран, но выводит только первую, остальные игнорирует! Подскажите, чего здесь не хватает?
2.
Аноним
+2 / -1
Мне нравитсяМне не нравится
21 октября 2005, 10:15:47
Опечатка:

"Функция imagecopyresampled() появилась в библиотеке GD с версии 2.0.1 и отличается от imagecopyresampled() тем, что при изменении размеров <...>"

Вместо второй imagecopyresampled() должно быть imagecopyresize()
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог