немного о фильтрах

Главная Форумы Использование Общие вопросы немного о фильтрах

В этой теме 9 ответов, 3 участника, последнее обновление  spoilt_exile 6 года/лет, 3 мес. назад.

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

    Frag
    Участник

    в гимпе есть хороший фильтр по адресу «Искажения — Очистить каждую вторую строку». Два вопроса: есть ли в природе подобный фильтр, но чтобы очищал строки с произвольным номером, например, каждую третью, пятую или девятую? и как эта операция (имеется в виду — «Очистить каждую вторую строку») называется, чтобы прописать её в скрипт?

    #1410

    zend
    Участник

    Похоже на:
    (script-fu-erase-rows run-mode image drawable option option option)

    Вот её исходник:


    (define (script-fu-erase-rows img drawable orientation which type)
    (let* (
    (width (car (gimp-drawable-width drawable)))
    (height (car (gimp-drawable-height drawable)))
    (position-x (car (gimp-drawable-offsets drawable)))
    (position-y (cadr (gimp-drawable-offsets drawable)))
    )

    (gimp-image-undo-group-start img)
    (letrec ((loop (lambda (i max)
    (if (< i max)
    (begin
    (if (= orientation 0)
    (gimp-rect-select img position-x (+ i position-y) width 1 CHANNEL-OP-REPLACE FALSE 0)
    (gimp-rect-select img (+ i position-x) position-y 1 height CHANNEL-OP-REPLACE FALSE 0))
    (if (= type 0)
    (gimp-edit-clear drawable)
    (gimp-edit-fill drawable BACKGROUND-FILL))
    (loop (+ i 2) max))))))
    (loop (if (= which 0)
    0
    1)
    (if (= orientation 0)
    height
    width)
    )
    )
    (gimp-selection-none img)
    (gimp-image-undo-group-end img)
    (gimp-displays-flush)
    )
    )

    (script-fu-register "script-fu-erase-rows"
    _"_Erase Every Other Row..."
    _"Erase every other row or column"
    "Federico Mena Quintero"
    "Federico Mena Quintero"
    "June 1997"
    "RGB* GRAY* INDEXED*"
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Drawable" 0
    SF-OPTION _"Rows/cols" '(_"Rows" _"Columns")
    SF-OPTION _"Even/odd" '(_"Even" _"Odd")
    SF-OPTION _"Erase/fill" '(_"Erase" _"Fill with BG")
    )

    (script-fu-menu-register "script-fu-erase-rows"
    "/Filters/Distorts")
    #1411

    Frag
    Участник

    как его оформить, чтобы можно было задавать исходный и целевой каталог и он обрабатывал все значки в исходном и складывал в целевой? пытался редактировать скрипт, который мне дал один хороший человек с этого форума — та что-то не выходит

    #1412

    Frag
    Участник

    вот исходник того скрипта:


    (define (script-fu-iconfx dir_in input_format dir_out svg_w svg_h svg_aspect ex_gray)
    (define input-ext)
    (cond
    ((= input_format 0) (set! input-ext "[pP][nN][gG]"))
    ((= input_format 1) (set! input-ext "[sS][vV][gG]"))
    )

    (if (= svg_aspect TRUE)
    (set! svg_h svg_w)
    )

    (define out-ext "png")

    (let* (
    (dir_os (if (equal? (substring gimp-dir 0 1) "/") "/" "\"))
    (pattern (string-append dir_in dir_os "*." input-ext))
    (filelist (cadr (file-glob pattern 1)))
    )


    (if (= (length filelist) 0)
    (begin
    (gimp-message
    (string-append
    "Сценарий не обнаружил файлов в указанной папке.n"
    "Совет: поменяйте маску и проверьте наличие файлов."
    )
    )
    (quit)
    )
    )
    (if (and (equal? dir_in dir_out) (= input_format 0) (> (length filelist) 0))
    (begin
    (gimp-message
    (string-append
    "Внимание!"
    "nn"
    "Вы пытаетесь сохранить файлы в в папку-источник:"
    "n" dir_in "n"
    "Это может привести к перезаписи исходных файлов.n"
    "Исполнение сценария прекращено.n"
    "Совет: используйте другую папку для вывода файлов."
    )
    )
    (quit)
    )
    )


    (while (not (null? filelist))
    (let* (
    (cur_target (car filelist))
    (img
    (if (= input_format 1)
    (car (file-svg-load 1 cur_target cur_target 90 svg_w svg_h 2))
    (car (gimp-file-load 1 cur_target cur_target))
    )
    )
    (srclayer)
    (filename (car (gimp-image-get-filename img)))
    (target_out)
    (file)
    (res_layer)
    )
    (set! srclayer (car (gimp-image-get-active-layer img)))

    ;Script block
    (if (= (car (gimp-drawable-is-rgb srclayer)) FALSE)
    (gimp-image-convert-rgb img)
    )
    (gimp-desaturate-full srclayer 2)
    (gimp-invert srclayer)
    (gimp-curves-spline srclayer 0 10 #(0 0 25 14 91 81 163 194 255 255))
    (plug-in-colortoalpha 1 img srclayer '(0 0 0))
    (if (= ex_gray TRUE)
    (gimp-image-convert-grayscale img)
    )


    (set! file (substring filename (string-length dir_in) (- (string-length filename) 4 )))
    (set! target_out (string-append dir_out dir_os file "." out-ext))
    (file-png-save-defaults 1 img srclayer target_out target_out)
    (gimp-image-delete img)
    )
    (set! filelist (cdr filelist))
    )
    )
    )

    (script-fu-register
    "script-fu-iconfx"
    _"/Filters/RSS/Icon_FX v0.2"
    "Пакетная обработка иконокn
    для пользователя frag."
    "Непочатов Станислав"
    "GPLv3"
    "25 ноября 2010 г."
    ""
    SF-DIRNAME "Папка-источник" ""
    SF-OPTION "Входящий формат" '(
    "PNG"
    "SVG"
    )
    SF-DIRNAME "Папка-назначение" ""
    SF-VALUE "Ширина для SVG" "64"
    SF-VALUE "Высота для SVG" "64"
    SF-TOGGLE "Прировнять высоту к ширине" TRUE
    SF-TOGGLE "Превратить в серое" FALSE
    )
    #1414

    spoilt_exile
    Участник

    Вот. Подцепил сей скрипт к своему. Выходит неплохо. Еще добавил JPEG как входной параметр, на всякий пожарный.

    #1415

    Frag
    Участник

    это офигенно! премного благодарности!!

    #1416

    spoilt_exile
    Участник

    Я его тут только что прогнал. Он затирает строки белым. Оно так и должно быть?

    #1417

    zend
    Участник

    spoilt_exile, а обрабатываемое изображение с альфаканалом?

    #1418

    Frag
    Участник

    spoilt_exile написал:
    Я его тут только что прогнал. Он затирает строки белым.

    да не, нормально всё

    #1419

    spoilt_exile
    Участник

    2 zend: точно, без альфа-канала.
    2 frag: ну раз нормально, тогда я спокоен.

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

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