Попросил меня человек с ПыхаФорума помочь с библиотекой для визуального выделения объекта на картинке с последующем обрезом этого объекта, то есть «Crop» как говорится! :-)

Фронтенд часть я реализовал при помощи jQuery плагина — imgAreaSelect и соответственно не без помощи библиотеки jQuery. Что заняло у меня минут 10-15, так как я с этим плагином уже работал и успешно применял на проекте Moskva.RU

Бекенд часть решил сделать на PHP GD, хотя сначала хотел на PHP iMagick, однако в силу того, что библиотека imagick на хостингах часто не установлена — решил не рисковать.

Как это выглядит

93592015621

http://demo.adw0rd.ru/imgcrop/

Итак, перейдем к реализации

Качаем и подключаем imgAreaSelect, а также jQuery.

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ImgCrop</title>
    <link rel="stylesheet" href="./styles/screen.css" type="text/css" media="screen" />
    <script type="text/javascript" src="./scripts/jquery-1.2.6.pack.js"></script>
    <script type="text/javascript" src="./scripts/jquery.imgareaselect-0.6.1.js"></script>
    <script type="text/javascript" src="./scripts/imgareaselect.js"></script>

</head>
<body>
    <div id="page">
        <div id="workspace">
            <img style="float: left; margin-right: 10px;" src="ladybug_ant.jpg" id="image"/>
        </div>
        <br style="clear:both" />
        <div id="result"><img src="./images/ajax-loader.gif" alt="ajax" /></div>

    </div>
</body>
</html>

Теперь посмотрим на реализацию фронтенд части:

    function imgCrop(img, selection)
    {
        // загрузка...
        $('#result')
        .html('<img src="./images/ajax-loader.gif" alt="ajax" />')
        .css({display: "block"});

        // отправляем данные бэкенду
        $.post(
        './backend/index.php',
        {
            w: selection.width,
            h: selection.height,
            x: selection.x1,
            y: selection.y1,
            i: $('#workspace > img').attr('src')
        },
        function(txt){
            $('#result').html(txt);
        },
        'text'
        );
    }

    // Сначала инициализируем плагин imgAreaSelect и передаем параметры
    $(window).load(function () {
        $('#image').imgAreaSelect({
            movable: true,
            resizable: true,
            onSelectEnd: imgCrop // после выделения объекта срабатывает ф-ия imgCrop()
        });
    });

Реализацию бэкенда не стал выкладывать, так как в этой статье это не так важно, кому надо, тот посмотрит в каталог /backend/ и найдет то что ищет... ;)

P.S. не забудьте указать права на запись файлу tmp.jpeg :)

-----------------------------------

Для простой версии:

Демка http://demo.adw0rd.ru/imgcrop/
Сырцы http://demo.adw0rd.ru/imgcrop.zip

-----------------------------------

Для расширенной версии:

Демка http://demo.adw0rd.ru/imgcropext/
Сырцы http://demo.adw0rd.ru/imgcropext.zip


Комментарии (13) на запись «ImageCrop с помощью jQuery, плагина imgAreaSelect и PHP GD»

» Трекбеки скрыты, показать их?
  1. adw0rd | 26.12.2008 в 11:36

    Кстати, данный плагин использует сервис Gravatar.com ;-)

  2. vasa_c | 27.12.2008 в 19:49

    Кто кого использует?

  3. adw0rd | 28.12.2008 в 01:14

    Ссорь, Граватар использует — плагин :-)

  4. Купил себе мониторчик :) | Мастерская интернет-разработчика | 22.02.2009 в 20:53

    [...] php GD imagemagick crop [...]

  5. Москва - не тонет ;) | Мастерская интернет-разработчика | 25.03.2009 в 10:25

    [...] imgareaselect [...]

  6. MySQL. Количество вхождений подстроки в строку | Мастерская интернет-разработчика | 26.03.2009 в 20:54

    [...] imgAreaSelect [...]

  7. FreeBSD. Установка и настройка ProFTPD | Мастерская интернет-разработчика | 28.03.2009 в 08:46

    [...] imgareaselect Оставить комментарий | Comment RSS | Теги: FreeBSD, FTP Назад: FreeBSD. Восстановление root’ового пароля Далее: MySQL. Количество вхождений подстроки в строку [...]

  8. Hello, World! | Мастерская интернет-разработчика | 31.03.2009 в 22:14

    [...] jquery image crop PHP ImageMagick [...]

  9. epsyl | 06.07.2009 в 09:15

    еще бы при удерживаемом шифте — делать квадратное выделение

    и при нажатом пробеле можно было перемещать выделение...

    :)

  10. adw0rd | 06.07.2009 в 13:50

    epsyl, хитрец!) напиши :)

  11. BUDD\ | 06.12.2009 в 14:44

    а как можно сделать область выделения заданого размера? вот нужно, чтоб при выборе горизонтальной фотки она обрезалась до вертикальной 250×350

  12. adw0rd | 07.12.2009 в 09:52

    odyniec.net/projects/imgareaselect/usage.html тут посмотрите, особенно: maxHeight, maxWidth, minHeight, minWidth, resizable, aspectRatio.

  13. As-is | 17.05.2010 в 18:16

    Сообщение с опозданием — несмотря на 1.5 годичное отсутствие сообщений:

    Работает прекрасно, — особенно с большими изображениями.

    Но при этом и появляется проблема-изображение не масштабируется

    и «закрывает» весь экран.

    Можно ли масштабировать исходное изображение — именно масштабировать (Не ресайзинг).

    Скрипт иллюстративный. Было бы не плохо иметь возможность загружать изображение, давать ему имя при загрузке на сервер,

    а кроп-изображение сохранять с именем «имя первоначально+кроп».расширение файла.

    Спасибо, познавательно.

Оставить комментарий