LINUX.ORG.RU
ФорумTalks

Новый API Gimp-а

 , ,


2

2

Старый API, экспорт в PNG:

        png_chunks = (1, 1, 0, 1, 1)
        pdb['file-png-save'](img, drawable, savedir + '1.png', '1.png', 0, 2, *png_chunks)

Новый API, экспорт в PNG:

        args = Gimp.ValueArray.new(11)
        args.insert(0, GObject.Value(Gimp.RunMode, Gimp.RunMode.NONINTERACTIVE))
        args.insert(1, GObject.Value(Gimp.Image, image))
        args.insert(2, GObject.Value(Gimp.Drawable, drawable))
        args.insert(3, GObject.Value(GObject.TYPE_STRING, savedir + '1.png'))
        args.insert(4, GObject.Value(GObject.TYPE_STRING, '1.png'))
        args.insert(5, GObject.Value(GObject.TYPE_BOOLEAN, 0))
        args.insert(6, GObject.Value(GObject.TYPE_INT, 2))
        args.insert(7, GObject.Value(GObject.TYPE_BOOLEAN, True))
        args.insert(8, GObject.Value(GObject.TYPE_BOOLEAN, True))
        args.insert(9, GObject.Value(GObject.TYPE_BOOLEAN, False))
        args.insert(10, GObject.Value(GObject.TYPE_BOOLEAN, True))
        Gimp.get_pdb().run_procedure('file-png-save', args)

Gimp 2 позволял по памяти накатывать 1-строчники, которые применяли муторные однообразные преобразования ко всем загруженным файлам. Gimp 3 требует копипастить простыни бойлерплейта. Документацию на функции хрен найдёшь.

С прямым доступом к полям объектов стало хреново. Gimp.Layer.opacity осталось доступно для чтения и записи, но было отвязано от всего. Чтобы узнать и сменить прозрачность, нужно вызывать геттер и сеттер.

Пока единственное достоинство нового API — переход на 3-й Питон.

P.S. В IRC сообщили, что документации пока нет. Вместо неё есть Gobject Introspection.

★★★★★

Последнее исправление: question4 (всего исправлений: 3)

Чепяль-бида…

Gimp 3 требует копипастить простыни бойлерплейта.

Как пропатчить Photoshop CS5 под FreeBSD? (%

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Photoshop CS5 под FreeBSD?

Ставь VirtualBox и в него Windows XP :) Раз уж начал пиратить, не останавливайся, бери от жизни всё!

question4 ★★★★★
() автор топика

Gimp.Layer.opacity осталось доступно для чтения и записи, но было отвязано от всего. Чтобы узнать и сменить прозрачность, нужно вызывать геттер и сеттер.

Вот нет бы писать на C#, там с get/set все очень удобно сделано

Хотя и в питон тоже похоже завезли!

https://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от question4

начал пиратить

Где я начал пиратить? о_О Я планирую купить Ps. Ну не донатить же в GIMP после такой подлянки…

Вообще, это было типа «надо валить, но некуда».

Windows XP

Зачем откапывать ископаемое, если у меня легально скаченная с MSN Windows 10 без WMP где-то валяется? Я её даже пару раз в bhyve ставил, но быстро разламывал в попытках настроить. ☺

VirtualBox

В FreeBSD есть штатный bhyve, прекрасно справляющийся со своей задачей, зачем компилять из портов? Чем оно лучше?

mord0d ★★★★★
()
Ответ на: комментарий от cvs-255

Хотя и в питон тоже похоже завезли!

Через декораторы оно уж тыщу лет как есть в Python. С разморозкой!

писать на C#

Необходимость указывать область видимости в "скриптоте" (а сабжевый тред именно про это) — это рак мозга.

mord0d ★★★★★
()
Ответ на: комментарий от question4

Я планирую купить Ps

CS5? Разве его ещё продают?

Ну я немножко в криокамере, ибо, как уже писал выше, с Windows у меня отношения не сложились. ☺

Какая сейчас актуальная версия? о_О

mord0d ★★★★★
()

Надо было еще это самое скриптование на джаве делать, и все, 10/10.

MOPKOBKA ★★★★★
()
Ответ на: комментарий от mord0d

Какая сейчас актуальная версия? о_О

Не уверен, продают ли версии помимо облачной :) Википедия пишет, что последней необлачной версией с бессрочной лицензией была CS6, которую прекратили продавать в 2017-м. Дальше — только подписка. Актуальные версии — 2020 и 2021.(21 и 22).

question4 ★★★★★
() автор топика

Аха-ха, то есть у Gimp 3 просто практически НЕТ больше встроенного API, потому что кодить вот это и тем более почти недокументированное мало кто станет.

praseodim ★★★★★
()

документации пока нет. Вместо неё есть Gobject Introspection.

Как и всегда с софтом на GTK.

hateyoufeel ★★★★★
()

AP передай привет хипстерам из ГИМП-кодинг-тим

Kompilainenn ★★★★★
()
Ответ на: комментарий от question4

Не уверен, продают ли версии помимо облачной :)

Эээ… То есть у нас не стало редакторов растровой графики? о_О

Нуок, переходим на б-гомерзский вектор… Там кто-то (я не помню как пишется его ник) пилил либу…

mord0d ★★★★★
()

Новый API

Ппц. Это не API для скриптов на python, это низкоуровневое днище.

Manhunt ★★★★★
()
Ответ на: комментарий от AP

Гайд пока неполный

Это мягко сказано :) Методы классов отсутствуют, рекомендации по замене функций, оставшихся без эквивалентных, отсутствуют. Даже автодополнение в Питоне более информативно :) При том, что хэлп поломан (баг висит с 2008 или 2012-го). Похожий на мой пример, как 1-строчный вызов PDB становится 10-строчным, присутствует.

P.S. Класс file (точное имя сходу не помню), из-за которого я и полез это ковырять, отсутствует.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от mord0d

То есть у нас не стало редакторов растровой графики? о_О

Почему? Есть и прекрасно работают. Только за них надо платить не один раз, а каждый месяц. Ну или на год вперёд.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Только за них надо платить не один раз, а каждый месяц. Ну или на год вперёд.

Или не надо за торрент-эдишн - работают вечно =)

praseodim ★★★★★
()
Ответ на: комментарий от mord0d

Список версий Фотошопа в Википедии, если вопрос о нём.

question4 ★★★★★
() автор топика
Ответ на: комментарий от thunar

Цитирую свежий чат в IRC:

No, the reason it looks ugly is because of PDB, not because of GIR

For example, PDB does checks at several places that the GValue's type is G_TYPE_FILE and fails if you pass something like a GLocalFile (I think this is even an issue somewhere)

The Python bindings can usually do automatic GValue conversion, but because of those checks (it also does that for stuff like GIMP_TYPE_IMAGE etc), so you can't use it because it will make for example a GValue with type GIMP_TYPE_LAYER, but the PDB code will fail since that's != GIMP_TYPE_DRAWABLE* or something

Now, you _could_ do some extra automated generation for bindings, but I think that should really be a plan B (the problem is also that, once you start making an extra API for syntactic sugar, the boundary on how far you can go there becomes undefined, leading to very hard to maintain APIs)

AP ★★★★★
()

Это даже не API, а ABI. Наркоманы.

RazrFalcon ★★★★★
()
Ответ на: комментарий от thunar

А всё это нельзя спрятать в декоратор?

В версии 2 были функции-обёртки, которые внутри вызывали PCB и иногда позволяли указывать не все параметры, а брать по умолчанию. Но их поудаляли, и писать новые пока не собираются.

question4 ★★★★★
() автор топика

При всем уважении, но… Это не апи а катастрофа.

James_Holden ★★★★
()
Ответ на: комментарий от AP

https://gitlab.gnome.org/GNOME/gimp/commit/43d0f0fbd2c7a2c6c244f69cc0d3c5762830d855

Вручную наделать функций-обёрток как раньше? Лично мне это было бы удобнее всего, но как это сочетается с обоснованным нежеланием делать «hard to maintain API»?

Про то, что в Питоне серию из N insert-ов можно заменить списком из N строк, уже знаю. Поскольку всё равно нужно N вызовов GObject.Value(), уровень неудобства не отличается.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Я щас работаю буфером обмена между людьми, язык которых понимаю не до конца :)

AP ★★★★★
()

Судя по исходникам надо new_from_values

michwill ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.