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

Если у вас возникла необходимость изменять размер изображения с php, то чаще всего такую возможность предоставляет движок,  на котором реализован сайт. Но иногда такого не бывает, приходится писать функции ресайза самому.  Приведу пример функций ресайза изображений.

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

Функция imagecopyresampled() появилась в библиотеке GD с версии 2.0.1 и отличается от imagecopyresampled() тем, что при изменении размеров плавно интерполируются значения цветов в точках изображения.  Об ограничениях на работу функции imagecopyresampled() с палитровыми изображениями в документации по PHP ничего не сказано. Более того, там есть сноска, в которой описываются проблемы, возникающие с палитровыми изображениями. В примерах мы будем использовать функцию imagecopyresampled(), но если у вас более старая версия GD, то просто замените «resampled» на «resized».

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

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);

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

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);

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

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

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);