Если ваш сайт поддерживает загрузку изображений, то наверняка у вас есть желание, чтобы все они были оформлены по определенному шаблону. Напрашиваются два варианта, как этого достичь. Первый доверить пользователю, урезку ужимку и прочие действия над изображением, однако не стоит так уж сильно надеяться на него, обычный посетитель может не иметь программного обеспечения для работы с изображением или попросту не знать, как с ним обращаться. Второй вариант, доверить манипуляции над изображением специализированному скрипту. Именно о втором варианте и пойдет речь в статье.
Отличным решением является встроенное PHP расширение Imagick, нацеленное на работу c изображением, использует ImageMagick API. В арсенале класса Imagick присутствует богатый перечень методов для создания, редактирования, компоновки изображений, в статье я рассмотрю два наиболее востребованных:
cropImage() – урезка изображений;
thumbnailImage() – изменение размера изображений;
Урезка изображения cropImage()
cropImage(width, height, offset x, offset y) – метод урезает часть изображения. Первые два параметра метода (width, height) указывают ширину и высоту урезаемой области, вторые два параметра (offset x, offset y) позицию места, откуда начинается урезка, относительно начала картинки, возвращает булево значение true в случае успешной урезки.

Рис 1.Урезка изображения методом cropImage()
Листинг 1. Урезка изображения.
$inFile = "photo.jpg";
$outFile = "photo-cropped.jpg";
$image = new Imagick($inFile);
$image->cropImage(400, 400, 30, 10);
$image->writeImage($outFile);
writeImage() - метод сохраняющий результат работы на диск, в качестве параметра указывается имя нового изображения, если имя файла не указано, то изменения будут применены к текущей картинке.
Изменение размера изображения
thumbnailImage(width, height, bestfit) – метод уменьшает размер изображения.
Аргументы width и height соответственно ширина и высота отредактированного изображения. Если значение ширины или высоты равно 0, то размер изображения выставляется по второму параметру, а аргумент с 0 значением подгоняется пропорционально.
Необязательный третий параметр bestfit может принимать значения true(по умолчанию), false. Данный аргумент пригодится, если исходное изображение меньше размеров указанных в методе thumbnailImage() (к примеру, исходные 300x200, а в результате оно должно стать 450x300), указав bestfit = false изображение увеличиться до требуемых размеров, однако потеря качества картинки неизбежно.
Листинг 2. Изменение размера изображения.
$inFile = "photo.jpg";
$outFile = "image_resized.jpg";
$image = new Imagick($inFile);
$image->thumbnailImage(400,0);
$image->writeImage($outFile);
Пример
Листинг 3. Форма для отправки изображения на сервер. Файл index.php
<!doctype html>
<html>
<head>
<title> Форма для отправки изображения на сервер </title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label>Изображение: <input type="file" name="file" id="file"></label>
<input type="submit" name="submit" value="Загрузить и урезать">
</form>
</body>
</html>
Листинг 4. Php сценарий для обработки изображения. Файл upload.php
<?php
if (isset($_FILES["file"])) {
$tmpFile = $_FILES["file"]["tmp_name"];
//Имя изображения
$fileName = "image_resized.jpg";
list($width, $height) = getimagesize($tmpFile);
// Проверка, является ли файл действительно изображением
if ($width == null && $height == null) {
header("Location: index.php");
return;
}
// Изменение размеров если это необходимо
if ($width >= 400 && $height >= 400) {
$image = new Imagick($tmpFile);
$image->thumbnailImage(400,0);
$image->writeImage($fileName);
}else{
move_uploaded_file($tmpFile, $fileName);
}
}
?>