По мере возможности, буду дорабатывать.
И помните, gd уже умер.
<?php
/*
string $pic - исходный файл
string $save_as - имя обработанного файла
array $prop - Размер изображения
boolean $save_animation - Сохранение анимации при работе с .gif
boolean $save_prop - Сохранение пропорций изображения
array $corners - Скругление углов
*/
/*Примеры использования:
# Получим file.png размером не превышающий 100x100
resize('file.jpeg', 'file.png', array(100, 100));
# Получим file.png с размером 100x100, даже если исходный был 16x16
resize('file.jpeg', 'file.png', array(100, 100), 0, 0);
# Получим file.png с размером не превышающий 100x100 и закругленными углами на 100 градусов
resize('file.jpeg', 'file.png', array(100, 100), 0, 1, array(100, 100));
*/
function resize ($pic, $save_as, $prop, $save_animation = false, $save_prop = true, $corners = array ()) {
$format = functions::format($pic);
$thumb = new Imagick();
$source = new Imagick($pic);
foreach ($source as $thumb) {
if ($save_prop) {
if ($thumb->getImageHeight() > $prop[0])
$thumb->thumbnailImage(0, $prop[0]);
if ($thumb->getImageWidth() > $prop[1])
$thumb->thumbnailImage($prop[1], 0);
} else
$thumb->thumbnailImage($prop[0], $prop[1]);
if (isset($corners[0]) || isset($corners[1]))
$thumb->roundCorners($corners[0], $corners[1]);
$thumb->setImagePage($thumb->getImageWidth(), $thumb->getImageHeight(), 0, 0);
if ($save_animation == false) break;
}
$thumb->setFirstIterator();
if ($save_animation && $format == 'gif') $save = $thumb->writeImages($save_as, true);
else $save = $thumb->writeImage($save_as);
$thumb->destroy();
$source->destroy();
return $save;
}
?>