Python Script

jakabar

Kino Beauftragter
Ich trau mich gar nicht zu fragen, weil ich bin bestimmt wieder voll ins Fettnäpfchen trete damit.

Ich habe mir eine winziges Python-Script heruntergeladen, das ich als zusätzliche Unterstützung für GIMP benutzen will. Kann mir jemand sagen, womit ich ein Python Script ausführen kann - also mit welchem Programm.

Ich kann es mir zwar in jedem x-beliebigen Editor ansehen, aber wie führe ich es aus?

Von sowas hab ich absolut keine Ahnung!
 
Danke! Wenn ich Zeit finde werde ich mir die Sprache mal zu Gemüte führen. Scheint ähnlich zu sein wie die GIMP-eigene Scriptsprache "Script-Fu", die ich auch noch dringend lernen muss! ^^
 
Hm!

Also ich habe mir jetzt mittels des Windows-Installers Python installiert - das Script lässt sich nun auch öffnen!

Aber - es passiert rein gar nichts! Wer kennt sich damit aus und kann helfen? Hab ich was vergessen oder brauche ich noch etwas spezielles dafür?

Hier ist das Script:

PHP:
#!/usr/bin/python
#
# This script generates a 3D galaxy from a number of parameters and stores
# it in an array. You can modify this script to store the data in a database
# or whatever your purpose is. THIS script uses the data only to generate a
# PNG with a 2D view from top of the galaxy. 
#
# The algorithm used to generate the galaxy is borrowed from Ben Motz
# <motzb@hotmail.com>. The original C source code for DOS (including a 3D
# viewer) can be downloaded here:
#
# http://bits.bristol.ac.uk/motz/tep/galaxy.html
#
# Generation parameters:

# Number of stars in the core (Example: 2000)
NUMHUB   = 5000

# Number of stars in the disk (Example: 4000)
NUMDISK  = 10000

# Radius of the disk (Example: 90.0)
DISKRAD  = 20000.0

# Radius of the hub (Example: 45.0)
HUBRAD   = 10000.0

# Number of arms (Example: 3)
NUMARMS  = 3

# Tightness of winding (Example: 0.5)
ARMROTS  = 0.5

# Arm width in degrees (Not affected by number of arms or rotations)
# Exammple: 65.0
ARMWIDTH = 65.0

# Maximum depth of arms (Example: 2.0)
MAXDISKZ = 450.0

# Maximum depth of core (Example: 16.0)
MAXHUBZ  = 3500.0

# Maximum outlier distance from arms (Example: 25.0)
FUZZ     = 25.0


# X and Y size of the created PNG
PNGSIZE    = 800

# Background color of the created PNG
PNGBGCOLOR = ( 0, 0, 0 )

# Foreground color of the created PNG
PNGCOLOR   = ( 255, 255, 255 )

# PNG frame size
PNGFRAME   = 50

# ---------------------------------------------------------------------------

import Image
import ImageDraw
import random
import math
import sys

stars = []

def generateStars():
    # omega is the separation (in degrees) between each arm
    # Prevent div by zero error:
    if NUMARMS:
        omega = 360.0 / NUMARMS
    else:
        omega = 0.0
    i = 0
    while i < NUMDISK:
        # Choose a random distance from center
        dist = HUBRAD + random.random() * DISKRAD

        # This is the 'clever' bit, that puts a star at a given distance
        # into an arm: First, it wraps the star round by the number of
        # rotations specified.  By multiplying the distance by the number of
        # rotations the rotation is proportional to the distance from the
        # center, to give curvature
        theta = ( ( 360.0 * ARMROTS * ( dist / DISKRAD ) )
        
            # Then move the point further around by a random factor up to
            # ARMWIDTH
                + random.random() * ARMWIDTH
                
            # Then multiply the angle by a factor of omega, putting the
            # point into one of the arms
                #+ (omega * random.random() * NUMARMS )
                + omega * random.randrange( 0, NUMARMS )
                
            # Then add a further random factor, 'fuzzin' the edge of the arms
                + random.random() * FUZZ * 2.0 - FUZZ
                #+ random.randrange( -FUZZ, FUZZ )
            )
            
        # Convert to cartesian
        x = math.cos( theta * math.pi / 180.0 ) * dist
        y = math.sin( theta * math.pi / 180.0 ) * dist
        z = random.random() * MAXDISKZ * 2.0 - MAXDISKZ

        # Add star to the stars array            
        stars.append( ( x, y ,z ) )

        # Process next star
        i = i + 1
    
    # Now generate the Hub. This places a point on or under the curve
    # maxHubZ - s d^2 where s is a scale factor calculated so that z = 0 is
    # at maxHubR (s = maxHubZ / maxHubR^2) AND so that minimum hub Z is at
    # maximum disk Z. (Avoids edge of hub being below edge of disk)
    
    scale = MAXHUBZ / ( HUBRAD * HUBRAD )
    i = 0
    while i < NUMHUB:
        # Choose a random distance from center
        dist = random.random() * HUBRAD
      
        # Any rotation (points are not on arms)
        theta = random.random() * 360
        
        # Convert to cartesian
        x = math.cos( theta * math.pi / 180.0) * dist
        y = math.sin( theta * math.pi / 180.0) * dist
        z = ( random.random() * 2 - 1 ) * ( MAXHUBZ - scale * dist * dist )
        
        # Add star to the stars array
        stars.append( ( x, y, z ) )
    
        # Process next star
        i = i + 1

def drawToPNG( filename ):
    image = Image.new( "RGB", ( PNGSIZE, PNGSIZE ), PNGBGCOLOR )
    draw = ImageDraw.Draw( image )
    
    # Find maximal star distance
    max = 0
    for ( x, y, z ) in stars:
        if abs(x) > max: max = x
        if abs(y) > max: max = y
        if abs(z) > max: max = z
    
    # Calculate zoom factor to fit the galaxy to the PNG size
    factor = float( PNGSIZE - PNGFRAME * 2 ) / ( max * 2 )
    for ( x, y, z ) in stars:
        sx = factor * x + PNGSIZE / 2
        sy = factor * y + PNGSIZE / 2
        draw.point( ( sx, sy ), fill = PNGCOLOR )
      
    # Save the PNG
    image.save( filename )
          
# Generate the galaxy          
generateStars()

# Save the galaxy as PNG to galaxy.png
drawToPNG( "galaxy.png" )

Das hab ich im Netz gefunden als ich nach der Galaxie-Grafik gegoogelt habe, die ich für den ORB benutzt habe. Die Möglichkeit damit verschiedene Galaxien selber zu machen, nach einer Anpassung auch in größer, fand ich interessant. Darum das Ganze...

Wenn ich das Script nun aber Doppelklicke erscheint nur Sekundenbruchteile ein Fenster und verschwindet gleich wieder. Nichts weiter passiert. laut dem Script sollte aber ein PNG-Bild generiert werden.

Bin ratlos!
 
Bist Du sicher? :unsure:

Meine Python Scripte laufen auch unter Win mit dem Pfad:
#!/usr/bin/env python
# -*- coding: Latin-1 -*-
für pyw und
#!/usr/bin/python
# -*- coding: Latin-1 -*-
für py

AFAIK wertet Win den Pfad nicht aus sondern arbeitet mit den eigenen Umgebungsvariablen.

BTW: ScriptFu ist ein Python Derivat, wenn mich nicht alles täuscht :D

Bei den Datenaman müsste eigentlich das PNG im selben Ordner gespeichert werden, ich ziehe es allerdings normalerweise vor, Dateien erstmal mit fopen zu öffnen und dabei den kompletten Pfad anzugeben und erst dann hinein zu schreiben. Mit den Malfunktionen habe ich mich noch nicht bechäftigt, Python habe ich bisher nur für text-basierte Sachen genommen...
 
Zuletzt bearbeitet:
Zu 99% Ja - natürlich ist Python aber nicht Perl.

Meine Perl Scripte laufen so unter Windows. :)

Vielleicht sind ja auch beide Möglichkeiten richtig -
wenn nicht, gibt uns Jaki sicher eine Rückmeldung und
ich habe wieder etwas dazu gelernt. :)


[Edit]:
Evtl. kann es auch so lauten:

#!C:/Python25/python.exe
# -*- coding: iso-8859-15 -*-

Coding u.U. dann notwendig, wenn Web-Applikationen erstellt werden.
 
Zuletzt bearbeitet:
Also - ich habe jetzt das:

#!/usr/bin/python --> #!c:/.../python.exe

/.../ : Pfad zur Python.exe

als auch das:

#!/usr/bin/python
# -*- coding: Latin-1 -*-
für py

ausprobiert. Bei beidem ist aber der Effekt genau wie vorher. Das Python-Fensterchen öffnet sich sekundenbruchteile und ist wieder weg und nix passiert. Wenn er irgendwo ein Bild speichert, dann finde ich es nicht. Aber müsste er laut dem Script nicht auch Eingaben erwarten?

Oh Mann! Das ist, wenn man sich als blutiger Anfänger was vornimmt. Man wird erschlagen von Seiten mit Infos aber nichts davon hilft auf die schnelle ein Problem zu lösen.

Woran erinnert mich das nur gerade? :D
 
Welche Python Version?

Gefunden bisher:

#!c:/Python/python.exe -u
A Python for Windows Tutorial

Wie startest Du das Script?
Eingabeaufforderung: python galaxy.py

Deutsches Python Forum:
Das deutsche Python-Forum :: Index


Nachtrag:
Habe Python und Galaxygen.py mal installiert.
Galaxygen.py nach C:\Python25 kopiert und versucht zu starten: Siehe Anhang 1

Die Fehlermeldung kriegen wir irgendwie auch noch wech.
 

Anhänge

  • J-Py-1.jpg
    J-Py-1.jpg
    57,1 KB · Aufrufe: 1.135
Zuletzt bearbeitet:
Python Version ist 2.5.2

Ich starte mit einem Doppelklick auf das Script, das mit Python.exe verlinkt ist.
 
Starten kann ich das Script von der Eingabeaufforderung aus -
erhalte aber entweder Syntax Error oder Image is not defined.

= Schlauch-Standing.:(
 
Bibliothek?

Im Script steht oben was von wegen import. Wenn das nicht da ist, geht's schief. Sind die GDI Bibliotheken da?
z.B.:
Python Imaging Library (PIL)
oder
gdmodule - Python GD module

Es könnte gut sein, dass die benötigt werden.

Deutschsprachiges Wiki mit deutscher Übersetzung des offiziellen Tutorials zu Python:
Übersicht - pythonwiki

Es gibt übrigens in Python eine Entwicklingsumgebung Namens IDLE, in der man Scripte interaktiv laufen lassen kann. Darin sind die Fehler besser auffindbar, als über die Windows Kommandofensterausgabe.
 
Vielleicht gibt es hier ja noch mehr Cracks die sich damit auskennen und helfen könnten!

Alles was ich brauche ist ja nur ein ausgeworfenes PNG, das ich mir dann mit GIMP importieren kann - und vllt. noch, das ich irgendwo die Größe des PNG vorgeben kann.

Hätte nicht gedacht, das es so schwierig werden würde... :eek:

----

Willkommen wäre auch eine Adaption in Gimp-Fu/Script-Fu - aber damit kenne ich mich auch (noch) nicht aus.
 
Hätte nicht gedacht, das es so schwierig werden würde... :eek:
Python ist halt eine ausgewachsene Interpreter Programmiersprache, da muss man leider ab und zu schon einmal in das Manual sehen ;)

Das gemeine an dem Script Download war, dass der nicht darauf hingewiesen hat, welche Module installiert sein müssen, deswegen heißt es nun raten. Es gibt leider nahezu endlos viele Python Module/Bibliotheken für alles mögliche. Ich bin mir gerade nicht sicher und kann auch gerade nicht nachsehen, da ich nicht am eigenen Rechner sitze, aber der Bilderkram könnte AFAIK auch im GTK (GIMP-Tool-Kit) Modul zu Python enthalten sein. Ich weiß jetzt allerdings nicht, ob das direkt im Installer enthalten ist, oder ob es nachträglich eingebunden werden muss...

Aber wie schon weiter oben gesagt: Bildbearbeitung und Python sind für mich persönlich keine zusammenhängenden Begriffe :D

Die Linuxer könnten sich ja auch drauf stürzen, da Python meistens direkt mit zur Distri gehört, da die Oberflächen sehr in Linux sehr häufig mittels GTK aufgebaut wird und somit prima mit Python manipulierbar ist ;)

edit: Grad nachgesehen: image gehört nicht zum Standard Modulumfang, siehe:
http://docs.python.org/modindex.html
 
Zuletzt bearbeitet:
Oben