Автоматическая генерация preview или качественный ресайз картинок

Обработка изображений – то, с чем сталкивается рано или поздно любой web-разработчик. Неважно какая задача перед вами стоит: генерация preview картинок или captcha это все свзяано с работой с графикой. Вот тут-то и начинаются обычно сложности, т.к. стандартная библиотека GD весьма примитивна. Кроме того, она сильно портит изображение при его ресайзе. Поэтому, я хочу рассказать об основах работы с Image Magic, правда далеко не на всех хостингах вы сможете найти расширение Imagick php. Еще раз хочу оговориться, если у Вас обыкновенный хостинг-перепроверьте установлен ли Image Magic (это можно сделать с помощью phpinfo()), в ином случае у Вас просто ничего не будет работать.

Вот приблизительно код который вы сможете использовать для автоматической генерации preview.


<?php

    
//Ширина желаемой превьюшки 

    
$w 100;    

    
//Высота желаемой превьюшки

    
$h 70;

    
//Создаем обьект Image Magic

    
$thumb = new Imagick();        

    
//"Читаем" изображение        

    
$thumb->readImage($name);

    
//Получаем ширину и высоту

    
$x $thumb->getImageWidth();

    
$y $thumb->getimageheight();

    
$nx $x;

    
$ny $y;

    
/**

     * Кусок кода ниже взят из официального мануала

     *  дабы не изобретать велосипед

     */

    
if ($x>=$w || $y>=$h

    {

        if (
$x>0$rx=$w/$x;

        if (
$y>0$ry=$h/$y;

           if (
$rx>$ry

           {

           
$r=$ry;

        } 

        else 

        {

            
$r=$rx;

        }

        
$nx=intval($x*$r);

        
$ny=intval($y*$r);

    }

    
/*

     * Собственно как раз метод ниже и 

     * производит ресайз

     */

    
$thumb->thumbnailimage($nx,$ny);

    
//Записываем новую картинку в файл с 

    // именем $name_chist1

    
$thumb->writeimage($name_chist1);

    
//Очищаем все и уничтожаем картинку в памяти.

    
$thumb->clear();

    
$thumb->destroy();

?>

Теперь по порядку. Во первых задаем ширину и высоту желаемого изображения, которое мы получим в результате. Далее создаем обьект класса Imagick (если вы не знакомы с ООП – не пугайтесь, в последующих статьях я постараюсь описать что это и с чем его едят :) На данный момент считайте что это «массив» на который можно воздействовать методами (функциями) класса Imagick, и получать элементы этого массива не $variable['key'], a $variable->key ).
После создания обьекта мы получаем исходное изображение из файла (метод readImage(), параметр которого-путь до файла). Далее получаем ширину и высоту исходного изображения.
Следующий кусок кода взят из официального мануала, чтобы соблюсти соотношение сторон и чтобы генерируемое изображение не выглядело вытянутым или сжатым (именно поэтому результирующее изображение будет не именно того размера который мы задали в начале, а, возможно, лишь одна из сторон будет соответствовать).
thumbnailimage собственно непосредственно ресайзит изображение. В отличии от аналогичных функций в GD «имага» получается не зашумленная. Далее сохраняем полученное изображение в файл и убираем за собой :) . Вот и все. Вообще Image Magick очень сильный инструмент для работы с картинками и я рекомендую почитать документацию по данной библиотеке на офф сайте php.

Комментарии (4) к “Автоматическая генерация preview или качественный ресайз картинок”

Оставить Ответ