Plugin Problem Python

Manfred Aabye
Manfred Aabye
 Member in General Themes
Tagged:

Plugin Problem Python


Kennt sich jemand mit Python aus?

Dieses Gimp Plugin bekomme ich nicht zum laufen es lädt und speichert nicht.

Dieses Plugin soll aus Gimp heraus OS und SL Terrain Daten in raw speichern und laden können.


#!/usr/bin/env python

# ***** BEGIN GPL LICENSE BLOCK *****
#
# Script copyright (C) Domino Designs Limited
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****

from gimpfu import *

height = 256
width = 256
layernames = [ "Height",
"Factor",
"Water",
"Parcels",
"For Sale",
"Edit Object",
"Edit Land",
"Safe",
"Flying",
"Landmark",
"Scripts",
"Original Height",
"Original Factor"
]
layers = len( layernames )

def python_fu_save_raw_terrain( image, drawable, filename, raw_filename):
gimp.progress_init("Saving %s"%(filename))
raw = ""
r = ""
if len( image.layers ) != layers:
raise Error("Image does not have %s layers"%( layers ))
#raise Error, "Image does not have %s layers"%( layers ) #OLD
drawables = [ ]
for l in range( layers ): drawables.append( None )
for l in image.layers:
try:
layer = layernames.index( l.name )
except ValueError:
raise ValueError("\"%s\" is not a supported layer name"%(l.name))
#raise ValueError, "\"%s\" is not a supported layer name"%(l.name) #OLD
drawables[ layer ] = l.get_pixel_rgn( 0, 0, width, height )
for h in range(height):
for w in range(width):
for l in range( layers ):
raw += drawables[ l ][ w, h ]
gimp.progress_update( float(h) / height )
f = open( filename, "wb" )
f.write( raw )
f.close()

def register_save():
gimp.register_save_handler("file-slraw-save", "raw", "")

def python_fu_load_raw_terrain( filename, raw_filename ):
pixels = []
f = open( filename, "rb" )
raw = f.read()
f.close()
img = gimp.Image(height, width, GRAY )
img.disable_undo()
pdelta = 1.0 / layers
gimp.progress_init("Loading %s"%(filename))
for l in range( layers ):
layer = gimp.Layer( img, layernames[ l ], height, width, GRAY_IMAGE,
100, NORMAL_MODE )
pr = layer.get_pixel_rgn( 0, 0, width, height )
r = raw[l::layers]
for w in range( width ):
pr[ w, 0:height ] = r[ w::width ]
gimp.progress_update( pdelta * l + pdelta * ( w / width ) )
img.add_layer( layer, l )
img.active_layer = img.layers[0]
img.filename = filename
img.enable_undo()
return img

def register_load():
gimp.register_load_handler("file-slraw-load", "raw", "")

register(
"file-slraw-load",
"Load OpenSim raw terrain file into layers",
"Select a raw terrain file to load",
"Domino Marama",
"Domino Designs Limited",
"2018",
"OpenSim Terrain",
"GRAY",
[
(PF_STRING, "filename", "File Name",""),
(PF_STRING, "raw-filename", "raw file name", "")
],
[
(PF_IMAGE, "image", "raw terrain", "")
],
python_fu_load_raw_terrain,
"<Load>",
on_query = register_load
)

register(
"file-slraw-save",
"Save layers to OpenSim raw terrain file",
"Select a raw terrain file to save as",
"Domino Marama",
"Domino Designs Limited",
"2018",
"OpenSim Terrain",
"GRAY",
[
(PF_IMAGE, "image", "Input image", "" ),
(PF_DRAWABLE, "drawable", "Drawable to save", ""),
(PF_STRING, "filename", "The name of the file to save the image in", ""),
(PF_STRING, "raw-filename", "The name entered", "")
],
[],
python_fu_save_raw_terrain,
"<Save>",
on_query = register_save
)

main()


Tagged:

Comments

  • Pius Noel
    Pius Noel
     Moderator
    Welche Version von GIMP benutzt du und unter welchem Betriebssystem? 
    Bekommst du eine Fehlermeldung, oder was passiert, bzw. passiert nicht so, wie du es erwartest?
    Und wo hat du das Script abgelegt?

    Ich habe gerade festgestellt, dass bei mir mit GIMP 2.10.8 unter Windows 10 kein einziges meiner eigenen Python Scripte (python_fu) funktioniert.

    Ich werde dem mal nachgehen. Es ist aber so lange her, dass ich zum letzten Mal was mit Python unter GIMP gemacht habe, dass es eine Weile dauern dürfte.

    Normalerweise sind by Python bei der Übernahme von Code typische Fehler in den Einzügen und Zeilenenden zu finden, die durch kopieren verändert wurden. Ich habe aber das Script bei mir sauber aufgestellt und es wird trotzdem nicht registriert.
  • Pius Noel
    Pius Noel
     Moderator
    Ooops... bei mir war der Grund, dass meine eigenen Scripte nicht mehr gingen, dass ich sie im falschen Verzeichnis hatte. Der Pfad hat sich von GIMP 2.8 auf GIMP 2.10 geändert.

    Beim Manfred Aabye schrieb:

    Dieses Gimp Plugin bekomme ich nicht zum laufen es lädt und speichert nicht.

    Sorry, habe ich irgendwie überlesen. Wir sind jetzt wahrscheinlich auf dem gleichen Stand ;)

    Ich konnte ein einziges Mal ein aus Opensim exportiertes Terrain laden. Sonst bekomme ich immer eine Meldung der Art "Es ist kein RAW-Lader zum Öffnen von »Pentax PEF-Raw«-Dateien installiert...."

    Ich kann ebenfalls keine Terrain-Datei speichern. Ich bekomme die wenig aussagekräftige Meldung "Das Plugin OpenSim Terrain konnte das Bild nicht speichern". 

    Im Moment bin ich auch etwas ratlos.
  • Manfred Aabye
    Manfred Aabye
     Member

    Genau so ist es bei mir auch, nur konnte ich noch kein OpenSim raw laden.

    Ansonsten nur halt die Meldung kann nicht laden, kann nicht speichern.

    Schade eigentlich, es ist eine tolle Sache terrain-raw zu bearbeiten.

    Ich hab das zwar so hinbekommen das es sich einbindet, aber mehr nicht.


  • Pius Noel
    Pius Noel
     Moderator
    Ich geb's auf *seufz*... Mal geht das Laden, dann wieder nicht... meistens nicht. Speichern geht nie!

    Die Doku von Python Fu bringt einem auch nicht gerade weiter und Debuggen ist praktisch unmöglich. Ich habe keine Ahnung woran es liegen könnte. Ich habe auf meinem PC noch Python 3 installiert. Es könnte sein, dass es deswegen Konflikte gibt. 

    Ich mach noch einen Versuch mit GIMP 2.8 unter Linux. 
  • Pius Noel
    Pius Noel
     Moderator
    Es handelt sich hier hier aus meiner Sicht definitiv um einen Bug. Wie weit der damit zusammenhängt, dass ich auf meinem System auch noch ein Python 2.7 installiert habe, kann ich nicht mit Sicherheit sagen. 
  • Manfred Aabye
    Manfred Aabye
     Member

    Ja das Problem sind die Leute von Python die hätten den Namen und die Endung ändern müssen für Python3 damit es keine Verwechslung gibt (python3.exe, *.py3).

    Die wirren Dokumentationen über Python helfen mir auch kein bisschen weiter.

    Eigentlich schade denn Python ist im Grunde richtig gut.

    Die OpenSim Konsole lässt sich richtig gut steuern über Python, sogar die ini Dateien lassen sich mit Python (configparser.py) leicht bearbeiten.

    Leider gibt es nur dieses üble IronPhython für C#, sonst hätte ich schon versucht ein Plugin zu bauen wie OpensimPython, nur halt für Python3. https://github.com/realXtend/OpensimPython


Sign In or Register to comment.

Welcome

It looks like you're new here. If you want to get involved, click one of these buttons!

Discussions

© Copyright 2018 - Metropolis Metaversum
All times are GMT