Wie schreibe ich ein Script für Gimp?

05.02.2025 - Lesezeit: 3 Minuten

Hier die Antwort von: https://chatopenai.de

Um ein Skript für GIMP zu schreiben, kannst du die Skriptsprache Scheme (genauer gesagt, die Dialekte von Scheme, die GIMP verwendet) oder Python verwenden. Hier ist eine einfache Anleitung, wie du ein Skript in Python für GIMP schreiben kannst:

Voraussetzungen

  1. GIMP installieren: Stelle sicher, dass GIMP installiert ist und Python-Support aktiviert ist.
  2. Python-Fu aktivieren: GIMP sollte Python-Fu unterstützen. Du kannst dies überprüfen, indem du in GIMP unter „Filter“ nach „Python-Fu“ suchst.

Schritt-für-Schritt-Anleitung

  1. Skript erstellen: Öffne einen Texteditor und erstelle eine neue Datei mit der Endung .py , z.B. my_script.py .

  2. Skriptstruktur: Füge den folgenden Code in die Datei ein. Dies ist ein einfaches Beispiel, das ein Bild öffnet und es speichert:

python

   from gimpfu import *

   def my_script(image, layer):
       # Beispiel: Bild in Graustufen umwandeln
       pdb.gimp_image_convert_rgb(image)
       pdb.gimp_image_convert_indexed(image, 0, 0, 0, 0, 0)

       # Bild speichern
       file_path = "/path/to/save/your_image.png"  # Pfad anpassen
       pdb.file_png_save(image, layer, file_path, file_path)

   register(
       "python_fu_my_script",
       "My Script",
       "A simple GIMP script",
       "Your Name",
       "Your Name",
       "2023",
       "/Filters/My Script",
       "*",
       [],
       [],
       my_script)

   main()
  1. Skript speichern: Speichere die Datei im GIMP-Skriptverzeichnis. Du kannst das Verzeichnis finden, indem du in GIMP zu „Edit“ > „Preferences“ > „Folders“ > „Scripts“ gehst.

(Bei mir : /home/wnf/.config/GIMP/2.10/scripts/)

  1. GIMP neu starten: Starte GIMP neu, damit das Skript geladen wird.

  2. Skript ausführen: Gehe in GIMP zu „Filter“ > „My Script“, um dein Skript auszuführen.

Weitere Hinweise

  • Anpassungen: Du kannst das Skript anpassen, um spezifische Funktionen auszuführen, wie das Zuschneiden von Bildern oder das Speichern in verschiedenen Formaten.
  • Dokumentation: Die GIMP-Python-Dokumentation ist eine nützliche Ressource, um mehr über die verfügbaren Funktionen und deren Verwendung zu erfahren: GIMP Python-Fu Documentation.
Tags: gimp script

Raspi Display Anzeige drehen

18.01.2025 - Lesezeit: ~1 Minute
$ sudo nano /boot/config.txt
(Rotate 270) 
dtoverlay=waveshare35a -> dtoverlay=waveshare35a:rotate=0

Operation geglückt. Patient tot.

Leider ist der Bildschirm stark blickwinkelabhängig, so dass ich die Anzeige wieder zurück gedreht habe.

Tags: Raspi

Debian 12 VMware Workstation deinstallieren

18.01.2025 - Lesezeit: ~1 Minute

Nachdem ich die VMware Workstation seit gut einem Jahr nicht mehr benutzt habe, kann ich sie mit gutem Gewissen deinstallieren.

$ sudo vmware-installer -u vmware-workstation

Sollte ich doch noch Sehnsucht nach meinen alten Daten haben, kann ich über guestmount darauf zugreifen:

#!/bin/bash
dir="/media/wnf/sydney_platte_c"
if [[ ! -e $dir ]]; then
    sudo mkdir $dir
    sudo chmod 777 $dir
fi
guestmount -a /wnfdaten/vmware/Sydney/Delphi10-cl2.vmdk -i --ro $dir
Tags: VMware

Autostart Python-Script auf Raspi LXQT

15.01.2025 - Lesezeit: 2 Minuten

Literatur

Den Autostart Ordner anlegen, falls er nicht existiert. Danach eine Startdatei anlegen.

mkdir ~/.config/autostart
nano .config/autostart/wnfjukebox.desktop

Das Programm im Terminal starten, damit man eventuelle Fehlermeldungen sehen kann.

[Desktop Entry]
Type=Application
Name=wnfJukebox-Anzeige
Exec=xterm -hold -e '/home/bernd/bin/wnfjukenbox'

Das Programm arbeitet als Anzeige für MQTT. Da das Netzwerk beim Autostart noch nicht hochgefahren ist, muss auf das Netzwerk gewartet werden

from time import sleep
import paho.mqtt.client as mqtt

cMQTT_HOST = '192.168.80.107'
cMQTT_TOPIC = '/c2023/wnfPlay'

aMusikAnzeige = None

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe(cMQTT_TOPIC)

def on_message(client, userdata, msg):
    global aMusikAnzeige
    # print(client)
    # print(userdata)
    # aJetzt = datetime.datetime.now().strftime("%H:%M")
    # print(aJetzt + " " + msg.topic + " " + str(msg.payload))
    if aMusikAnzeige:
        aMusikAnzeige.anzeige(msg)

def starteAnzeige(aAnzeige):
    global aMusikAnzeige
    aMusikAnzeige = aAnzeige
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    # auf dem Raspi mit LXQT wird das Programm von Autostart gestartet
    # es kann sein, dass das Netzwerk noch nicht hochgefahren wurde.
    # Deshalb wir hier auf das Netzwerk gewartet.
    aConnected = False
    aAnz = 0
    while not aConnected and (aAnz < 10):
        try:
            client.connect(cMQTT_HOST, 1883, 60)
            aConnected = True
            client.loop_start()
        except Exception as E:
            print(E)
            sleep(5)
            aAnz += 1
Tags: LQXT Raspi Autostart

Python Bottle mit SSL (https)

14.01.2025 - Lesezeit: ~1 Minute

Änderung gegen über der Original-Quelle (Deprecated since version 3.6: OpenSSL has deprecated all version specific protocols.)

PROTOCOL_TLSv1_2 wird zu PROTOCOL_TLS_SERVER

  • test_bottle_https_ssl.py
from bottle import ServerAdapter,run,get

class SecureAdapter(ServerAdapter):
    def run(self, handler):
        from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer
        from socketserver import ThreadingMixIn
        import ssl

        if self.quiet:
            class QuietHandler(WSGIRequestHandler):
                def log_request(*args, **kw):
                    pass

            self.options['handler_class'] = QuietHandler

        #Setup SSL context for 'A+' rating from Qualys SSL Labs.
        context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_SERVER)
        context.load_cert_chain(certfile='server.pem')
        context.set_ciphers('EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH')

        class ThreadAdapter(ThreadingMixIn, WSGIServer): pass
        ssl_server = make_server(self.host, self.port, handler, server_class=ThreadAdapter, **self.options)
        ssl_server.socket = context.wrap_socket(ssl_server.socket, server_side=True)
        ssl_server.serve_forever()

@get("/x")
def get_x():
 return "Hi there"

run(server=SecureAdapter, host="0.0.0.0", port=8090)
Tags:

Raspberry Pi OS Lite mit Music Player Daemon (mpd)

11.01.2025 - Lesezeit: ~1 Minute

Auch unter Raspberry Pi OS Lite läuft der Music Player Daemon (mpd).

zur Beachtung:

  • der speaker-test blockiert die alsa-Schnittstelle, so dass der mpd keine Musik abspielen kann.
Tags: Raspi mpd