PHP функции для работы с изображениями

Опубликовано 3 января, 2010 в PHP

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

Сохраню свои мини-поделки на PHP+GD здесь.

Функция для изменения размеров изображения.

Часто пригождается мне, когда необходимо создавать превьюшки (тубы) из больших картинок.
Передается 4 параметра: $file – путь до исходного изображения, $out – путь, куда сохранить изображение с новым размером, $w – ширина на выходе, $q – качество.

function resize_image($file, $out, $w = 200, $q = 90) {
    if(empty($file) | empty($out)) return false;
    $src = imagecreatefromjpeg($file);
    $w_src = imagesx($src);
    $h_src = imagesy($src);
    $ratio = $w_src/$w;
    $w_dest = round($w_src/$ratio);
    $h_dest = round($h_src/$ratio);
    $dest = imagecreatetruecolor($w_dest, $h_dest);
    imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
    imagejpeg($dest, $out, $q);
    imagedestroy($dest);
    imagedestroy($src);
    return true;
}
resize_image('1.jpg', '2.jpg', 200, 50); //Изменяет размер картинки 1.jpg, лежащей в одной папке со скриптом, уменьшенное изображение сохраняет как 2.jpg

Функция для наложения водяного знака

Часто необходимо наложить на картинку копирайт, с этим справляется функция ниже.
Передается 2 параметра: $file – путь до исходного изображения, $watermark – путь до картинки-водяного знака.
После того, как функция отработает, поверх исходного файла в нижнем правом углу появляется водяной знак.

function watermark($file, $watermark) {
	if(empty($file) | empty($watermark)) return false;
	$wh = getimagesize($watermark);
	$fh = getimagesize($file);
	$rwatermark = imagecreatefromjpeg($watermark); //Иногда может понадобиться наложить прозрачный png, тогда заменяем функцию на imagecreatefrompng
	$rfile = imagecreatefromjpeg($file);
	imagecopy($rfile, $rwatermark, $fh[0] - $wh[0], $fh[1] - $wh[1], 0, 0, $wh[0], $wh[1]);
	imagejpeg($rfile, $file, '100');
	imagedestroy($rwatermark);
	imagedestroy($rfile);
	return true;
}
watermark('1.jpg', '2.jpg'); //Теперь 1.jpg в нижнем правом углу обляпался 2.jpg



Комментарии «PHP функции для работы с изображениями»:
Комментариев: 7. Обязательно оставьте свой!
Juhan 06.01.2010 в 17:10

Спасибо!! иду експериментироват :)

Я 03.08.2010 в 13:37

"Функция для наложения водяного знака" именно это и искал. Коротко , понятно, работает.
спасибо.
с Ув Я.

Иван 26.08.2010 в 15:04

Спасибо огромное. Помогли с решением проблемы наложения водяного знака

Дилетант 14.11.2010 в 23:39

Очень эстетичный код. Красота!

Gogita 09.01.2011 в 10:27

Мне такая просьба: если возможна научите нас как уменьшить вес фотографии и как удалить фотографию из папки с помощью PHP

pistol 09.01.2011 в 10:51

Gogita, сжимать вес без изменения размеров можно только у jpeg изображения.

imagejpeg($img, $out, $q);

$q – качество (от 0 до 100 кажется).

С потерей размера – с помощью функции в посте (resize_image).

Удалить один файл:

unlink(«images/photo.jpg»);

Kirill 17.02.2011 в 21:10

А как установит размер знака?

Ваш комментарий: