Не используйте (script-fu-guides-remove 1 image drawable) в

Главная Форумы Разработка Разработка сценариев Не используйте (script-fu-guides-remove 1 image drawable) в

В этой теме 5 ответов, 2 участника, последнее обновление  zend 6 года/лет, 11 мес. назад.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #814

    zend
    Участник

    Вот этот скрипт не давал мне спокойно жить всю текущую неделю:


    ;скрипт сводит изображение
    ;обрезая слои до размеров холста
    (define (script-fu-flatten-doc-photo image drawable)

    ;запрещаем UNDO
    (gimp-image-undo-group-start image)

    ;удаляем все направляющие
    (script-fu-guides-remove 1 image drawable)

    ;Сводим изображение
    (gimp-image-flatten image)

    ;обновляем изображение на дисплее
    (gimp-displays-flush)

    ;разрешаем UNDO
    (gimp-image-undo-group-end image)
    )

    (script-fu-register
    ;имя главной функции скрипта
    "script-fu-flatten-doc-photo"
    ;пункт меню, который будет запускать скрипт
    _"/НА_ДОКУМЕНТЫ/Кадрировать"
    ;короткое описание выполняемых скриптом действий
    "Сводит изображение обрезая слои до размеров холста"
    ;информация об авторе
    "Карабанов Александр (zend.karabanov@gmail.com)"
    ;информация о копирайте
    "Карабанов Александр"
    ;дата создания
    "3.10.2010"
    ;тип изображения с которым работает скрипт
    ;(в данном случае со всеми типами)
    ""
    ;фиктивный элемент интерфейса
    (указываает на исходное ихображение)
    SF-IMAGE "" 0
    ;фиктивный элемент интерфейса
    ;(указываает на активный слой
    ;в исходнм ихображеним)
    SF-DRAWABLE "" 0
    )

    Этот скрипт прекрасно отрабатывал сразу после запуска GIMP, но при повторном запуске в течении этой же сессии завершался с ошибкой:

    Если перезапустить GIMP, то ошибка вновь не проявляла себя при первом запуске скрипта, при повторном же запуске все начиналось снова. Даже если я убирал из сценария (gimp-image-undo-group-start image) ошибка не исчезала. Я начал грешить на GIMP-2.6.11 и стер его, установив GIMP-2.6.10, но ничего не изменилось…

    И вот не далее как 30 минут назад, случайно закоментировав (script-fu-guides-remove 1 image drawable), я выяснил, что именно эта функция была корнем зла. Похоже, что она изменяет дескриптор изображения (или в данном контексте правильно говорить идентификатор изображения?), а GIMP-у об этом не сообщает (кстати эта функция и не возвращает ничего), а потом сама этим дескриптором воспользоваться не может. Прочие скрипты выполняются нормально. Вот такие дела. Придется искать альтернативный способ удалять направляющие с холста.

    #1295

    zend
    Участник

    Ах да, чуть не забыл. Если открыть другое изображение в течении этой же сессии, то ошибка все равно проявлялась и, как ни странно только при запуске этого скрипта. Все прочие скрипты отрабатывают на ура.

    #1301

    zend
    Участник

    Замени (script-fu-guides-remove 1 image drawable) вот такой конструкцией:

    ;удаляем все направляющие
    (while
    (<> (car (gimp-image-find-next-guide image 0)) FALSE)
    (gimp-image-delete-guide image
    (car (gimp-image-find-next-guide image 0))
    )
    )
    #1302

    spoilt_exile
    Участник

    script-fu-guides-remove 1 image drawable)

    Кажется была как-то ошибка в GIMP когда при указании run mode для скриптов смещались различные аргументы. Попробуйте вовсе убрать эту несчастную еденицу. Для script-fu скриптов необязательно указывать этот параметр.
    P.S. Скрипт кстати отлично пашет на моей инсталяции (GIMP 2.6.10-1 i386 Debian Testing).

    #1303

    zend
    Участник

    Спасибо, что избавили от костыля. Без этой единицы скрипт действительно заработал.

    #1400

    zend
    Участник

    Забавно, но эта моя поделка:


    ;удаляем все направляющие
    (while
    (<> (car (gimp-image-find-next-guide image 0)) FALSE)
    (gimp-image-delete-guide image
    (car (gimp-image-find-next-guide image 0))
    )
    )

    почти копия кода функции script-fu-guides-remove :-)

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)

Для ответа в этой теме необходимо авторизоваться.