Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

thumbnails: элегантное решение создания уменьшенной копии изображения (Rumata)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Oct 13, 2006 6:14 pm (написано за 16 минут 9 секунд)
   Post subject: thumbnails: элегантное решение создания уменьшенной копии изображения
Reply with quote

хотя на нашем форуме существует несколько решений, описывающих создание миниатюрных копий изображений,
например, Функция для создания уменьшенной копии изображения (forum.dklab.ru/php/advises/FunctionForCreationOfTheReducedCopyOfTheImage.html)
или класс для закачки изображений с проверкой и созданием превьюшек (forum.dklab.ru/php/advises/ClassForZakachkiImagesWithCheckAndCreationPrevyushek.html)

из всех существующих мне больше нравится вариант от Юрия Насретдинова, но я рискнул запостить еще один вариант - собственный

мысли об универсальном, настраиваемом методе, предусматривающем все возможные варианты, возникли достаточно давно (примерно за 5-6 месяцев до создания темы xpoint - ссылка 1 в конце поста). тогда же и была написана черновая версия, которая предусматривала уже два варианта создания превьюшек. через некоторое время я решил модернизировать и унифицировать функцию. требовалось создать программный объект, который был бы легок в использовании и существенно гибок в своей работе. в результате возник небольшой класс, который покрывает все накладываемые на него требования

Примеры использования

Пример 1. Простое создание миниатюры в браузер (по умолчанию, PNG 150x150)
Code (php): скопировать код в буфер обмена
include_once 'includes/Thumbnail.php';

$filename = 'files/image.jpg';
Thumbnail::output($filename);
Пример 2. Простое создание миниатюры в файл (по умолчанию, PNG 150x150)
Code (php): скопировать код в буфер обмена
include_once 'includes/Thumbnail.php';

$input_file = 'files/image.jpg';
$output_file = 'files/thumb.jpg';
Thumbnail::output($input_file, $output_file);
Пример 3. Использование собственных параметров (превью - JPEG, 200х200 пикселей, вывод в браузер)
Code (php): скопировать код в буфер обмена
include_once 'includes/Thumbnail.php';

$filename = 'files/image.jpg';
$options = array (www.php.net/array)(
    'width'  => 200,
    'height' => 200,
    'type'   => IMAGETYPE_JPEG,
);
Thumbnail::output($filename, null, $options);
Пример 4. Каскадное создание миниатюры из очень большого изображения (выделение центральной части картинки со сторонами в половину оригинала, масштабирование результата к размерам 150х150 и вывод в браузер)
Code (php): скопировать код в буфер обмена
include_once 'includes/Thumbnail.php';
 
$filename = 'files/image.jpg';
$middleImage = Thumbnail::render($filename, array (www.php.net/array)(
    'percent' => 0.5,
    'method'  => THUMBNAIL_METHOD_CROP,
));
 
Thumbnail::output($middleImage);
ссылки по теме
1. xpoint.ru/forums/internet/graphics/thread/33955.xhtml
2а. debugger.ru/articles/thumbnails - первая публичная редакция
2б. xpoint.ru/know-how/Articles/TeoriyaIPraktikaSozdaniyaMiniatyurnyihIzobrazheniy?8 - последняя редакция
2в. phpmrtgadmin.sourceforge.net/download/demo/thumbnail/ демо и исходники
3. xpoint.ru/know-how/PHP/TeoreticheskieStat'i/QuickThumbs?4 (xpoint.ru/know-how/PHP/TeoreticheskieStat)
4. smoking-room.ru/data/pnp/design.html пункт 4

Last edited by Rumata on Thu Dec 14, 2006 3:41 pm; edited 3 times in total
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Dec 12, 2006 8:44 pm (спустя 1 месяц 30 дней 2 часа 30 минут; написано за 8 минут)
   Post subject:
Reply with quote

вспомнилась на Точке собственная тема годичной давности. это меня сподвигло на переписывание предыдущего поста. первоначально он отсылал на модуль PEAR, который в реальности является производным от настоящего. хотя он и работоспособен, но в нем допущена опечатка, и он зависим от других.

у настоящего модуля больше плюсов -
он независим
он проще
он немногословен
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8641
Карма: 201
   поощрить/наказать

Location: 007 495

PostPosted: Wed Dec 13, 2006 11:15 pm (спустя 1 день 2 часа 31 минуту; написано за 5 секунд)
   Post subject:
Reply with quote

Rumata wrote:
include_once 'includes/Thumbnail.php';
Откуда файл брать-то???
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Dec 15, 2006 5:09 pm (спустя 1 день 17 часов 53 минуты; написано за 40 секунд)
   Post subject:
Reply with quote

Юpий Насрeтдинов wrote:
Откуда файл брать-то???
так вот же phpmrtgadmin.sourceforge.net/download/demo/thumbnail/
Code (any language): скопировать код в буфер обмена
include_once 'includes/Thumbnail.php';
Back to top
View user's profile Send private message
ExHealer
Участник форума



Joined: 07 Dec 2004
Posts: 73
Карма: 7
   поощрить/наказать


PostPosted: Fri Jan 12, 2007 4:53 pm (спустя 27 дней 23 часа 44 минуты; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Необходимо указать что этот класс является простым врапером стандартных php функций.
Со всеми их недостатками.
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Apr 22, 2008 1:07 pm (спустя 1 год 3 месяца 9 дней 20 часов 14 минут; написано за 5 секунд)
   Post subject:
Reply with quote

позволю себе процитировать ссылку на ресурс - описание замечательной адаптации чужого кода под свои нужды
www.palivoda.eu/2008/04/image-upload-validate-resize-and-save-in-the-database-for-cakephp-12/
Back to top
View user's profile Send private message
Binom
Заглянувший



Joined: 16 Apr 2009
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Thu Apr 16, 2009 8:34 pm (спустя 11 месяцев 24 дня 7 часов 26 минут; написано за 41 секунду)
   Post subject:
Reply with quote

Rumata wrote:
так вот же phpmrtgadmin.sourceforge.net/download/demo/thumbnail/
может тема и устарела, но сылочка не рабочая :(
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Apr 21, 2009 6:46 pm (спустя 4 дня 22 часа 11 минут; написано за 4 секунды)
   Post subject:
Reply with quote

debugger.ru/articles/thumbnails читали?
Back to top
View user's profile Send private message
SLIM_newnn
Guest





Карма: 386
   поощрить/наказать


PostPosted: Tue Apr 28, 2009 4:03 pm (спустя 6 дней 21 час 17 минут; написано за 7 минут 42 секунды)
   Post subject:
Reply with quote

очень нужен был метод crop по координатам (для создания квадратных превьюшек из выбранной области),
для связки с плагином jCrop (deepliquid.com/projects/Jcrop/demos.php?demo=live_crop)(на Jquery)
пришлось добавить пару фич в код Thumbnail.php
Code (php): скопировать код в буфер обмена
        // Set default options
        static (www.php.net/static) $defOptions = array (www.php.net/array)(
            'width'   => 150,
            'height'  => 150,
            'method'  => THUMBNAIL_METHOD_SCALE_MAX,
            'percent' => 0,
            'halign'  => THUMBNAIL_ALIGN_CENTER,
            'valign'  => THUMBNAIL_ALIGN_CENTER,
            'coordX'  => 0,
            'coordY'  => 0,
        );
и далее ниже
Code (php): скопировать код в буфер обмена
        // Estimate a rectangular portion of the source image and a size of the target image
        if ( $options['method'] == THUMBNAIL_METHOD_CROP ) {
            if ( $options['percent'] ) {
                $W = floor (www.php.net/floor)($options['percent'] * $sourceWidth);
                $H = floor (www.php.net/floor)($options['percent'] * $sourceHeight);
            } else {
                $W = $options['width'];
                $H = $options['height'];
            }

            $width  = $W;
            $height = $H;
            if ($options['coordY']) {
                $Y = $options['coordY'];
            } else {
                $Y = Thumbnail::_coord($options['valign'], $sourceHeight, $H);
            }
            if ($options['coordX']) {
                $X = $options['coordX'];
            } else {
                $X = Thumbnail::_coord($options['halign'], $sourceWidth$W);
            }
        } else {
пример использования,
$_POST['w'] - ширина выделенного фрагмента
$_POST['h'] - высота выделенного фрагмента
$_POST['x'] - координата X левой верхней грани
$_POST['y'] - координата Y левой верхней грани

ниже код создаст из любой картинки превьюшку (квадрат) размером минимум 100х100 и максимум 120х120 в зависимости от того,
какая ширина/высота выбранной области
Code (php): скопировать код в буфер обмена
    include_once 'library/Thumbnail.php';
         $filename = 'demo_files/flowers.jpg';
        $minWidth = 100;
        $minHeight = 100;
        $maxWidth = 120;
        $maxHeight = 120;
    // Options of the thumbnail
    $options = array (www.php.net/array)(
        'request' => 'get',
        'method'  => THUMBNAIL_METHOD_CROP,
        'width'   => $_POST['w'],
        'height'  => $_POST['h'],
        'coordX'  => $_POST['x'],
        'coordY'  => $_POST['y'],
    );
        // Cascade create of thumbnail over two steps
        $middleImage = Thumbnail::render($filename, $options);
        $options = array (www.php.net/array)(
        'width'   => isset (www.php.net/isset)($_POST['w']) && $_POST['w'] >= $minWidth && $_POST['w'] <= $maxWidth ? (int)$_POST['w'] : $maxWidth,
        'height'  => isset (www.php.net/isset)($_POST['h']) && $_POST['h'] >= $minHeight && $_POST['h'] <= $maxHeight ? (int)$_POST['h'] : $maxHeight,

        );
        Thumbnail::output($middleImage, null, $options);
Back to top
Guest






Карма: 386
   поощрить/наказать


PostPosted: Tue Apr 28, 2009 4:41 pm (спустя 38 минут; написано за 21 секунду)
   Post subject:
Reply with quote

*ниже код создаст из любой картинки выделенный фрагмент и сделает из нее превьюшку (квадрат)
Back to top
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Apr 28, 2009 10:17 pm (спустя 5 часов 35 минут; написано за 57 секунд)
   Post subject:
Reply with quote

SLIM_newnn, спасибо за интерес к классу (библиотекой назвать сложно) и дальнейшее его развитие.
Back to top
View user's profile Send private message
SLIM_newnn
Guest





Карма: 386
   поощрить/наказать


PostPosted: Wed Apr 29, 2009 9:03 am (спустя 10 часов 46 минут; написано за 23 секунды)
   Post subject:
Reply with quote

если интересно могу выложить демо как это всё работает в связке с jQuery Crop
Back to top
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1298
Карма: 78
   поощрить/наказать


PostPosted: Thu Jun 17, 2010 7:25 am (спустя 1 год 1 месяц 17 дней 22 часа 22 минуты; написано за 15 секунд)
   Post subject:
Reply with quote

SLIM_newnn,
выкладывайте. (-:
Back to top
View user's profile Send private message Send e-mail
artradixcom
Заглянувший



Joined: 08 May 2011
Posts: 1
Карма: -2
   поощрить/наказать

Location: Ukraine

PostPosted: Mon May 09, 2011 9:55 am (спустя 10 месяцев 22 дня 2 часа 29 минут; написано за 22 секунды)
   Post subject:
Reply with quote

SLIM_newnn wrote:
если интересно могу выложить демо как это всё работает в связке с jQuery Crop
Конечно выкладывай :)
Back to top
View user's profile Send private message
SnakeMFK
Заглянувший



Joined: 21 Apr 2006
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Thu Nov 17, 2011 8:41 pm (спустя 6 месяцев 8 дней 10 часов 46 минут; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

а как доработать класс для корректной работы с прозрачными png? на созданных превью прозрачность заменяется черным цветом ><
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML