Re: [Gimp-developer] How to call gimp_export_image() from Pythonplugin



On 20.06.2014 04:42, Joao S. O. Bueno wrote:
On 19 June 2014 20:38, Ed . <ej_zg hotmail com> wrote:
My understanding is that libgimp is for C plugins. Many libgimp functions
are in fact calls to PDB functions - see libgimp/gimppainttools_pdb.c for
example. The distinction between "high" and "low" level is not the one used
to determine what is in the PDB and what is not - despite what you say,
there are gimp-drawable-set-pixel and gimp-drawable-get-pixel procs in the
PDB.

It seems you are knowledgeable in writing interface code for Python. Why not
add gimp_export_image to the available python functions?
Because it is not there.

One problem with the current implementation of Pygimp is exactly that it uses
C to wrap around calls do libgimp.
The problem with this approach is that one loses all the dynamic aspects from
Python for these objects:
The GIMP Python objects,as exposed in pygimp are "native" objects - as such
they can not be modified by pure Python code.

For writing Python plug-ins one does either use the objects ofered in Pygimp,
with the functions enabled there in C code that requires a ton of
boiler-plate for eachmethod made available,
or use the Python PDB module, which allows one to call GIMP via the PDB.


So, if it is not clear yet, the "gimp_file_export" function just is
_not_ there.
It can be made available by a C patch in pygimp - but that is adding
functionality to a stable series.
Or it could be made available through the PDB - which would also make
it work from script-fu,
and whatever other bindings happen to work. That is also adding new
functionality.

The correct thing to do is to add it both ways - as an "export" method
for image objects,
and as a PDB call - in the 2.9 branch.

Now, talking about new features, you where the one experiencing with
GIMP and GIO - that, on the contrary of this simple call, is something
that matters: I'd very much like to rewrite GIMP Python using
GIO - (so this kind of stuff would be a non issue in the future:
everything available in C is ready without
needing explicit wrappers with boiler plate code) - how far did you
get with the GIO stuff?

What is GIO?
I heard about https://developer.gnome.org/gio/, but from it's description I don't get how it can be related to GIMP and it's plugins?


--
Vladimir Rutsky





-----Original Message----- From: Vladimir Rutsky
Sent: Thursday, June 19, 2014 11:52 PM
To: Ed .
Cc: gimp-developer

Subject: Re: [Gimp-developer] How to call gimp_export_image() from
Pythonplugin

On 19.06.2014 22:09, Ed . wrote:
It is not a PDB function, but a libgimp (C) function. Since pygimp can do
gimpui stuff (also C functions), there is no conceptual reason why pygimp
shouldn't also handle gimpexport (which is where gimp_export_image lives).

Which functions in GIMP goes to PDB, and which stays only in libgimp?

As I understand, libgimp should contain _all_ functionality, that may be
needed for external C plugins. So it's "low-level" library.

PDB functions are designed to be called from scripts for automation and
easer writing custom plugins in Scheme/Python/Perl scripts.
So there mostly should be "high-level" functions, since there is no
point in calling "low-level" operations, like set_pixel(), due to
performance overhead of PDB.

gimp_export_image() is "high-level" function: it does several operations
on image as whole and optionally asks user for some input.
If gimp_export_image() would be available though PDB, it could be called
from any "fu"-script, that can call PDB functions, and there would be no
need to export it specifically in Python, Perl, Ruby, C#...

Correct me if I'm wrong, since I'm new to PDB and GIMP development.

I thought that in Python it was straightforward to access C functions?
This is simply a function that returns an integer, albeit one that uses the
GIMP UI - which pygimp already can initialise.

Best way to use C functions from Python is to write wrapper module in C
that will export methods as Python functions/classes (just as
GIMP-Python does).
Also you can load shared object and call C-function directly using
libffi library (presented as ctypes module in Python), but this
error-prone and really hackish way.

_______________________________________________
gimp-developer-list mailing list
List address:    gimp-developer-list gnome org
List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list
List archives:   https://mail.gnome.org/archives/gimp-developer-list



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]