LeoBlog.Ru: программирование
как взгляд на мир
Начало > Проекты > Песни про графику > И снова о Script-Fu в GIMP
[fm]

2014-01-27

Добавлены: Киров-01.2014, Советский тракт, Пасегово, Чижи.

2014-01-15

Добавлены: Тайланд-12.2013, Бангкок, Муанг Боран, Аюттайя, Сад камней, Храм истины, Као-Кео.

2013-07-21

Добавлены: Тайланд-2013, Паттайя, Парк будды, обзорная площадка.

2013-07-17

Добавлены: Тайланд-2013, Паттайя, Нонг-Нуч.
Добавлены: Тайланд-2013, Бангкок, обзорная экскурсия.
Удалены: Тайланд-2013, Бангкок, обзорная экскурсия.
Добавлены: Тайланд-2013, Бангкок, обзорная экскурсия.

2013-06-16

Добавлены: Тайланд-2013, Бангкок, океанариум, Тайланд-2013, Вечерний Бангкок, Тайланд-2013, Бангкок, отель Prince Palace.
Добавлены: Тайланд-2013, Бангкок, прилёт.

2013-03-01

Добавлены: Киров, прогулка на природу.

2013-01-31

Удалены: Тайланд, 2011.Сплав, дегустация чая, возвращение (река Квай);
Добавлены: Тайланд, река Квай, 2011.Сплав, дегустация чая, возвращение.
Удалены: Тайланд, 2011.Мост, слоны, обезьяны и водопад (река Квай);
Добавлены: Тайланд, река Квай, 2011.Мост, слоны, обезьяны и водопад.
Удалены: Тайланд,река Квай, 2011.Буддийский храм;
Добавлены: Тайланд, река Квай, 2011.Буддийский храм.
Удалены: Тайланд, 2011.Буддийский храм (река Квай);
Добавлены: Тайланд,река Квай, 2011.Буддийский храм.
Удалены: Тайланд, 2011.Поселок на воде (река Квай);
Добавлены: Тайланд, река Квай, 2011.Поселок на воде ().
Удалены: Тайланд, Паттайя, 2011.Сад миллионлетних камней и крокодилы (Паттайя);
Добавлены: Тайланд, Паттайя, 2011.Сад миллионлетних камней и крокодилы.
Удалены: Тайланд, Паттайя, 2011. Храм будды (Паттайя);
Добавлены: Тайланд, Паттайя, 2011. Храм будды.
Удалены: Тайланд, Паттайя, 2011.
Удалены: Мини-сиам, день (Вечер);
Добавлены: Тайланд, Паттайя, 2011.Мини-сиам, вечер.
Удалены: Мини-сиам, день (Паттайя);
Добавлены: Тайланд, Паттайя, 2011.Мини-сиам, день.
Удалены: Буддийский монастырь (Паттайя);
Добавлены: Тайланд, Паттайя, 2011.Буддийский монастырь.
Удалены: Сплав, дегустация чая, возвращение (река Квай);
Добавлены: Тайланд, 2011.Сплав, дегустация чая, возвращение (река Квай).
Удалены: Мост, слоны, обезьяны и водопад (река Квай);
Добавлены: Тайланд, 2011.Мост, слоны, обезьяны и водопад (река Квай).
Удалены: Буддийский храм (река Квай);
Добавлены: Тайланд, 2011.Буддийский храм (река Квай).
Удалены: Поселок на воде (река Квай);
Добавлены: Тайланд, 2011.Поселок на воде (река Квай).
Удалены: Сад Нонг-Нуч (Паттайя);
Добавлены: Тайланд, Паттайя, 2011.Сад Нонг-Нуч.
Удалены: Сад миллионлетних камней и крокодилы (Паттайя);
Добавлены: Тайланд, Паттайя, 2011.Сад миллионлетних камней и крокодилы (Паттайя).
Удалены: Храм будды (Паттайя);
Добавлены: Тайланд, Паттайя, 2011. Храм будды (Паттайя).
Удалены: Приезд и первый день;
Добавлены: Тайланд, Паттайя, 2011. Приезд и первый день.

2012-11-27

Добавлены: Шестьдесят.

2012-11-19

Добавлены: Пишем планировщик времени реализации (2).

2012-09-29

Добавлены: Плагин для CMSimple: lktags, версия 1.1.

2012-09-27

Добавлены: Плагин для CMSimple: lktags, версия 1.0.

2012-09-25

Добавлены: Бета-версия плагина для CMSimple: lktags.

2012-09-10

Добавлены: Пишем планировщик времени реализации (1).

2012-07-24

Добавлены: Девушка и котэ.

2012-04-16

Добавлены: Портрет /3/.

2012-04-07

Добавлены: Портрет /2/.

2012-02-25

Добавлены: Учусь рисовать шарж /1/.

2012-02-23

Добавлены: Задачник.

2012-02-08

Добавлены: Мини-сиам, день (Вечер).

2012-01-26

Добавлены: Мини-сиам, день (Паттайя).
Добавлены: Буддийский монастырь (Паттайя).

2012-01-24

Добавлены: Приделал к IT.KIROV.RU RSS-ленту.

2012-01-14

Добавлены: Сплав, дегустация чая, возвращение (река Квай).

2012-01-10

Добавлены: Мост, слоны, обезьяны и водопад (река Квай).

2012-01-09

Добавлены: Буддийский храм (река Квай).

2012-01-07

Добавлены: Поселок на воде (река Квай).

2012-01-06

Добавлены: Сад Нонг-Нуч (Паттайя).

2012-01-05
Добавил возможность комментировать фотки из яндекс.фоток в галереях.

2012-01-04

Добавлены: Сад миллионлетних камней и крокодилы (Паттайя).
Добавлены: Храм будды (Паттайя).

2012-01-02

Добавлены: Приезд и первый день.
Добавлены: Тайланд, Паттайя, 2011.

2011-12-07

Добавлены: Портрет /1/.

2011-12-06

Добавлены: Внимательная.

2011-12-02

Добавлены: Студийная.

2011-11-29

Добавлены: Венок из одуванчиков.

2011-11-25

Добавлены: Задумчивая.

2011-11-24

Добавлены: Еще одна девушка.
Добавлены: Девушка на улице.

2011-11-20

Добавлены: В строй!.

2011-11-18

Добавлены: Вернемся к первому примеру.
Добавлены: Новый планшет.

2011-11-15

Добавлены: Немного эротики [R].

2011-11-14

Добавлены: Роман.
Добавлены: Стас.

2011-11-13

Добавлены: Илья.
Добавлены: Ольга.

2011-11-12

Добавлены: Юля.
Добавлены: Юра.

2011-11-11

Добавлены: Another old photo restoring.

2011-11-10

Добавлены: Кросавчег.
Добавлены: Алёнка.
Добавлены: Еще пример "карандашной" обработки.

2011-11-08

Добавлены: Make a picture from photo (pencil-like stylization) part 2.

2011-11-07

Добавлены: Просто о ретуши фотографий в GIMP (часть 11).
Добавлены: А вы знаете что развернуть крабовые палочки просто?.

2011-11-02

Добавлены: Make a picture from photo (pencil-like stylization).

2011-10-30

Добавлены: Программа Диван-ТВ.

2011-10-28

Добавлены: Просто о ретуши фотографий в GIMP (часть 10).
Добавлены: Пара новых скриптов для стилизации под рисунок.

2011-10-14

Добавлены: Переводчик гугль (Google Translator) и Путин на Калине.

2011-10-12

Добавлены: Просто о ретуши фотографий в GIMP (часть 9).

2011-10-10

Добавлены: Простенький скрипт для логов Апача.

2011-09-30

Добавлены: Печально, конец?.

2011-09-19

Добавлены: Убунта и вирусы.

2011-09-12

Добавлены: Поставил Ubuntu.

2011-08-19

Добавлены: Как я провел лето.

2011-07-14

Добавлены: Смешение двух техник. Эксперимент..

2011-07-06

Добавлены: Доделки на сайте.
Добавлены: Задумчивый взгляд.

2011-07-05

Добавлены: Девушка и роза.

2011-07-02

Добавлены: Фильм "Девичник в Вегасе". Впечатления..

2011-07-01

Добавлены: Один просвет, три звезды.

2011-06-27

Добавлены: Прикрутил к сайту RSS-ленту.

2011-06-23

Добавлены: Брат. Турция, 2011.

2011-06-20

Добавлены: Прогулка в Митино. Июнь, 2011.

2011-06-08

Добавлены: Прага-2011. Часть 5.

2011-06-06

Добавлены: Прикрутил к сайту Яндекс.Фотки.

2011-06-05

Добавлены: А вы знаете как открыть мельницу для специй KOTANYI?.

2011-05-13

Добавлены: Хачапури в отпуске.

2011-05-10

Добавлены: Девушка и хризантемы.

2011-04-23

Добавлены: Большая киска.

2011-04-22
Добавил к сайту возможность открывать многие картинки по клику отдельно в новом окне.


Добавлены: Пингвин.

2011-04-21

Добавлены: Юноша и стакан.
Добавлены: FileVersion из PHP под UNIX.

2011-04-20

Добавлены: Обезъянка.

2011-04-19

Добавлены: Наркошка.
Добавлены: Наркотег.

2011-04-18

Добавлены: Новый дизаен.
Добавлены: Лицо из кусочков.
Добавлены: Проба меня и планшета. По фотографии..
Удалены: Проба меня и планшета. По фотографии..
Добавлены: Планшетокошмарики. Перекрасил весь дизаен. Переделал картинку в шапке.

2011-04-15

Добавлены: Проба меня и планшета. По фотографии..

2011-04-08

Добавлены: Таркан по-русски.

2011-04-03

Добавлены: Новый стол.
Добавлены: Стихоробот.

2011-04-01

Добавлены: How to restore old photo with "colors and grain" script.

2011-03-25

Добавлены: Чистим кожу на фотографии при помощи "цвет-зерно".

2011-03-24

Добавлены: Скрипт для GIMP автоматизирующий прием "цвет-зерно".

2011-03-22

Добавлены: Прага-2011. Часть 4.

2011-03-21

Добавлены: Прага-2011. Часть 3.

2011-03-19

Добавлены: Прага-2011. Часть 2.

2011-03-18
немного поправил шрифты, немного поправил код автореферирования.


Добавлены: Прага-2011. Часть 1.

2011-03-05

Добавлены: Про ДР и вообще.

2011-01-20

Добавлены: Apriori, шаг первый.

2011-01-19

Добавлены: Чукча не читатель, чукча писатель (приступ первый).

2011-01-18

Добавлены: Чукча не читатель, чукча писатель.

2011-01-14

Добавлены: LL(1) парсер.

2011-01-07

Добавлены: И снова о Script-Fu в GIMP.

2010-12-20

Добавлены: йОлкО.

2010-12-06

Добавлены: Такие дела.

2010-11-29

Добавлены: А вы знаете как открыть замерзший замок двери машины?.

2010-11-19

Добавлены: Шаг третий. Осмысление. Конкретика.

2010-11-18

Добавлены: Потерял свой аккаунт в аське.
Добавлены: Второй шаг. Осмысление.

2010-11-12

Добавлены: Просто о ретуши фотографий в GIMP (часть 8).

2010-11-08

Добавлены: Брестская крепость - впечатления.

2010-11-04

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

2010-10-31

Добавлены: Турция-2010. Часть 3.

2010-10-29

Добавлены: Первый шаг. Интерпретация последовательности чего-то там в памяти.

2010-10-27

Добавлены: Пишем форт-систему.

2010-10-24

Добавлены: Турция-2010. Часть 2.

2010-10-22
добавил вывод новостей на морду сайта


Добавлены: Турция-2010. Часть 1.
Добавлены: Желто-голубой автобус.

2010-10-19

Добавлены: "Химкинский лес...".

2010-09-02

Добавлены: Жизненное наблюдение.

2010-07-28

Добавлены: Просто о ретуши фотографий в GIMP (часть 7).
Добавлены: Просто о ретуши фотографий в GIMP (часть 6).

2010-07-26

Добавлены: Просто о ретуши фотографий в GIMP (часть 5).

2010-07-17

Добавлены: Просто о ретуши фотографий в GIMP (вариация на тему части 3).

2010-07-07

Добавлены: Турция-2009.
Добавлены: Йо!Да!.

2010-07-02

Добавлены: Сегодня - большой день.

2010-06-27

Добавлены: Буду зверствовать.
Добавлены: Функция вывода отладочной информации.

2010-06-26

Добавлены: Просто о ретуши фотографий в GIMP (часть 4).

2010-06-20

Добавлены: Просто - о Script-Fu в GIMP.
Удалены: Просто - о Script-Fu в GIMP.
Добавлены: Просто - о Script-Fu в GIMP.
Добавлены: ГИС Киров.

2010-06-04

Добавлены: Просто о ретуши фотографий в GIMP (часть 3).
Добавлены: Просто о ретуши фотографий в GIMP (часть 2).
Добавлены: Просто о ретуши фотографий в GIMP.
Добавлены: Песни про графику.

2010-06-03

Удалены: ...как считается рейтинг фотографий в Битриксе?;
Добавлены: А вы знаете как считается рейтинг фотографий в Битриксе?.
Добавлены: ...как считается рейтинг фотографий в Битриксе?.

2010-04-20

Добавлены: Первое приближение.
Добавлены: Дизаен рОстеть :).

2010-04-13

Добавлены: Про изобретение велосипедов.

2010-02-28

Добавлены: А вы знаете как порезать торт на N (не совсем) одинаковых частей?.

2010-02-23

Добавлены: Быстрочиталка.

2010-02-22

Добавлены: "Нравится, не нравится...".
Добавлены: МояCMS - бред на заданную тему.
Добавлены: А вы знаете как проверить термостат двигателя?.
Добавлены: А вы знаете что блины....
Удалены: А вы знаете что...;
Добавлены: А вы знаете....
Добавлены: А вы знаете как переворачивать картошку на полной сковородке, не просыпав на плиту?.
Добавлены: А вы знаете что слить антифриз из двигателя....

2010-02-20

Добавлены: А вы знаете что такое лента ФУМ?.

2010-02-16

Добавлены: А вы знаете что есть линукс-livecd....

2010-02-14

Добавлены: А вы знаете что....

2010-02-07

Добавлены: Никогда не сдавайся.

2010-02-02

Удалены: Само(?)компиляция на си-шарп;
Добавлены: Самокомпиляция на си-шарп.
Добавлены: лог-файлы и олап для ленивых.
Добавлены: Само(?)компиляция на си-шарп.

2010-01-28

Добавлены: Некоторый анализ цен.

2010-01-13

Добавлены: Кола+Ментос+Эффект домино.

2010-01-09

Добавлены: Несколько мыслей о Форте (продолжение).

2010-01-05

Добавлены: Несколько мыслей о Форте.

2009-12-26

Добавлены: Раз-два, Сталин идет, три-четыре....

2009-12-21

Добавлены: Таблица ASCII коды 0-127.

2009-12-20

Добавлены: Как померить размер без линейки?.

2009-12-19

Добавлены: Про пельмени.

2009-12-18

Добавлены: Про погоду и официальные данные.
Добавлены: PyODConverter для OpenOffice 3.
Добавлены: Пакетная обработка файлов в OpenOffice.

2009-12-13

Добавлены: I feel gooood.

2009-12-12

Добавлены: Грамматики предшествования. Демонстратор..
Удалены: Грамматики предшествования. Демонстратор..

2009-12-10

Добавлены: Грамматики предшествования. Демонстратор..

2009-12-07

Добавлены: Последовательность редактирования двух массивов и её применение в CMSimple (часть 2).

2009-12-01

Добавлены: Цвета дизайна.

2009-11-28
написал онлайн-демонстратор для приближения дробей деревом Штерна-Броко


Добавлены: Приближение дробей.
Добавлены: Лаборатория.

2009-11-27
вынес раздел доработок cmsimple из проектов на верхний уровень. Так как некоторый задел имеется, в течении (некоторого) времени выложу разные прибамбасы, которые позволяют весьма повысить удобство работы с этой системой.


2009-11-26
прикрутил основной функционал автоматического отслеживания изменений содержимого, ради которого и затевал всю эту бодягу с вычислением редакционного предписания.


2009-11-25
начал писать статью про вычисление редакционного предписания в разделе математические игрушки


2009-11-22
начал раздел СофтоРаскопки. Написал заметку по пару подстрочных переводчиков.

написал заметку про СЧЛГ. Вообще начал большой(?) цикл по раскрытию определений терминов устоявшихся в моей речи и смущающих разум окружающих.


2009-11-16
начал новый раздел - математические игрушки; выложил в него первую утилитку - дробное приближение рациональных чисел, используя дерево Штерна-Броко


2009-11-14
выложил давно обещанные фотографии из отпуска


2009-11-12
написал программу bakupz; выложил её в проектах


2009-11-07
запущен сайт в тестовом режиме; куча недоделок, надо дописывать часть скриптов, надо создавать часть под проекты.


2009-11-06
я вспомнил про собственный блог; вышла очередная версия lkJSON с пофиксенными багами

GISMETEO: Погода по г.Киров


Яндекс.Погода


И снова о Script-Fu в GIMP

Очередной заход по автоматизации GIMP начался с тривиальной в общем-то задачки. Мне принесли кучу отсканированных документов, где у сканера была некорректно выставлена цветопередача. Итог - вместо белой бумаги, получалась какая-то бурая муть. Вот, например:



лечится такое в GIMP элементарно: берется инструмент "уровни" в цветах, белой пипеткой тыкается в точку где должно быть белое, гамма ставится в 0,6 для придания уклона цветам в "темноту".



И всё. Получается что-то такое:



Проблема лишь в том что таких файлов - не один десяток, и делать такое с каждым - отупляюще и  утомительно. Вывод - надо сделать так чтобы редактор сам делал все эти действия. Как минимум. Как максимум - чтобы при этом он и файлы сам открывал-записывал.

Итак, что должен делать минимальный скрипт:
  1. найти "белую" точку на картинке;
  2. задать её в "уровнях" как белую;
  3. выставить гамму в 0,6;
  4. обработать картинку.
Возникает лишь один вопрос - как нам определить "белую" точку? Решений "в лоб" - два: брать какую-либо фиксированную точку (например посредине листа) и пробежать по диагонали листа, найдя самую яркую. Первый вариант будет работать, но кроме случаев когда посредине листа точка черная. Второй будет слишком медленным - сканы "большие".

Совместив оба способа реализуем такую идею: возьмем 100 точек в случайных местах картинки, и посчитаем среднее арифметическое от них. Во-первых - относительно быстро (только 100 точек), во вторых - среднее будет цветом фона (оно же матожидание, оно же наиболее вероятное значение, т.е. именно цвет фона для листа с текстом), в третьих это будет действительно фон - за счет случайности выбора точек - попасть в точки "текста" намного менее вероятно чем в "фон".

Среднее по каждому цвету будем считать отдельно, и уровни править соответственно по отдельности. Ну и гамму добавим отдельно, для простоты.

        (while (< y 100)
            (set! i 0)
            (set! px (cadr (gimp-drawable-get-pixel dr
                (rand (- (car (gimp-drawable-width dr)) 1))
                (rand (- (car (gimp-drawable-height dr)) 1))
                ))
            )
            (while (< i 3)
                (aset xc i (+ (aref xc i) (aref px i) ) )
                (set! i (+ i 1))
            )
            (set! y (+ y 1))
            (gimp-progress-update (/ y 100))
        )

предварительно xc должен быть проинициализирован нулями. в реализации scheme в gimp (или в моем понимании) есть глюк, поэтому инициализацию пришлось делать явно:

        (set! i 0)
        (while (< i 3)
            (aset xc i 0)
            (set! i (+ i 1))
        )

ну и последнее - вычислим среднее и поправим уровни:

        (set! i 0)
        (while (< i 3)
            (set! y (round (/ (aref xc i) 100 ) ))
            (gimp-levels dr (+ i 1) 0 y 1.0 0 255)
            (set! i (+ i 1))
        )

всё в месте, добавив "стандартную" обвязку, выглядит так:

(define (script-fu-back-to-white img)

    (gimp-context-push)
    (gimp-image-undo-group-start img)

    (gimp-progress-set-text "Correcting background")
   
    (let
        (
            (xc #(0 0 0))
            (px #(0 0 0))
            (dr 0)
            (y 0)
            (i 0)
        )

        (set! xc #(0 0 0))
        (set! dr (car (gimp-image-get-active-drawable img)))

        (set! i 0)
        (while (< i 3)
            (aset xc i 0)
            (set! i (+ i 1))
        )

        ;(write_xc_message "before: " xc)
       
        (while (< y 100)
            (set! i 0)
            (set! px (cadr (gimp-drawable-get-pixel dr
                (rand (- (car (gimp-drawable-width dr)) 1))
                (rand (- (car (gimp-drawable-height dr)) 1))
                ))
            )
            (while (< i 3)
                (aset xc i (+ (aref xc i) (aref px i) ) )
                (set! i (+ i 1))
            )
            (set! y (+ y 1))
            (gimp-progress-update (/ y 100))
        )
       
        ;(write_xc_message "after: " xc)
       
        (set! i 0)
        (while (< i 3)
            (set! y (round (/ (aref xc i) 100 ) ))
            (gimp-levels dr (+ i 1) 0 y 1.0 0 255)
            (set! i (+ i 1))
        )
        (gimp-levels dr 0 0 255 0.60 0 255)
    )

   
    (gimp-image-undo-group-end img)
    (gimp-displays-flush)
    (gimp-progress-update 1.0)
    (gimp-context-pop)
)

теперь малость переделаем функцию из туториала по скрипт-фу из гимпа, для работы с файлами:

(define (batch-back-to-white pattern)
    (let*
        (
            (filelist (cadr (file-glob (string-append pattern "\\*.jpg") 1)))
        )
        (while (not (null? filelist))
            (let*
                (
                    (filename (car filelist)
                )
                (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
                (drawable (car (gimp-image-get-active-layer image))))
                (script-fu-back-to-white image)
                (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
                (gimp-image-delete image)
            )
            (set! filelist (cdr filelist))
        )
    )
)

и осталось лишь зарегистрировать наш новый плагин в редакторе:

(script-fu-register "script-fu-back-to-white"
                    "Reset background to white"
                    "Reset background, by changing channels levels upper value to average"
                    "Leonid Koninin"
                    "Leonid Koninin"
                    "2011"
                    "RGB*, GRAY*"
                    SF-IMAGE    "Image"         0
)

(script-fu-register "batch-back-to-white"
                    "Reset background to white (all *.jpg in directory)"
                    "Reset background, by changing channels levels upper value to average"
                    "Leonid Koninin"
                    "Leonid Koninin"
                    "2011"
                    "RGB*, GRAY*"
                    SF-DIRNAME       "Directory"       ""
)

(script-fu-menu-register "script-fu-back-to-white"
                         "<Image>/Filters/Leon")

(script-fu-menu-register "batch-back-to-white"
                         "<Image>/Filters/Leon")


вот и всё, хотя для такого маленького скрипта я изрядно повозился - опыта не хватает. сам скрипт можно скачать здесь.