Это BETA версия моего кода.
По мере возможности, буду дорабатывать.
И помните, 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;
}
?>
0 136 0
Без комментариев...