Hallo, Gast
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.

Benutzername
  

Passwort
  





Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 452
» Foren-Beiträge: 628

Komplettstatistiken

Benutzer Online
Momentan sind 9 Benutzer online
» 0 Mitglieder
» 5 Gäste
AhrefsBot, Bytespider, DotBot, bot

Aktive Themen
Thursday - 14:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 4 Stunden
» Antworten: 0
» Ansichten: 3
Thursday - 09:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 8 Stunden
» Antworten: 0
» Ansichten: 6
Thursday - 07:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Vor 10 Stunden
» Antworten: 0
» Ansichten: 3
Thursday - 02:00 CDT: Not...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 10:33
» Antworten: 0
» Ansichten: 5
Wednesday - 23:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 08:10
» Antworten: 0
» Ansichten: 6
Wednesday - 16:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
Gestern, 12:50
» Antworten: 0
» Ansichten: 9
Wednesday - 12:00 CDT: No...
Forum: Wetter in Little Rock
Letzter Beitrag: Joopi
18-09-2024, 08:53
» Antworten: 0
» Ansichten: 6
Zahnverzapfung herstellen...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
18-09-2024, 07:25
» Antworten: 0
» Ansichten: 4
Holzdübel bei Gehrung set...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
18-09-2024, 07:06
» Antworten: 0
» Ansichten: 7
Abrichten mit der Ober-/K...
Forum: Antiheimwerker
Letzter Beitrag: Joopi
18-09-2024, 06:52
» Antworten: 0
» Ansichten: 7

 
  Bilder auf eine maximale Seitenbreite/-höhe verkleinern
Geschrieben von: Joopi - 23-01-2023, 06:00 - Forum: Programmieren - Keine Antworten

Viele Bilder, die ich in meiner Sammlung habe, brauche ich nicht in der Originalgröße mehreren MegaBytes. Daher reduziere ich alle diese Bilder auf eine maximale Breite oder maximale Höhe von 1.024 Pixel.

In der Konsole erledige ich diese Aufgabe mit dem Tool ffprobe und muss mich mehr oder weniger um nichts kümmern. In Python sieht auch das anders aus.

Der folgende Codeschnipsel, der noch stark verbesserungswürdig ist, erledigt diese Aufgabe.

Code:
import os
import pathlib
from PIL import Image
import PIL

for bildordner in pathlib.Path(rename_ordner).iterdir():
    if bildordner.is_dir():
        os.chdir(bildordner)
        for bilddatei in pathlib.Path(os.getcwd()).iterdir():
            if bilddatei.is_file():
                imgfile = Image.open(rf"{bilddatei}")
                # Breite x Höhe.
                # Ausgabe in Tuple.
                # Der Maximalwert ist 1024 Pixel für Breite oder Höhe - je nach dem.
                width, height = imgfile.size
                if width > 1024 or height > 1024:
                    # Berechnung auf Grundlage des Maximalwertes von 1024
                    if width >= height:
                        verhaeltnis = height * 100 / width
                        widthnew = 1024
                        heightnew = verhaeltnis * widthnew / 100
                        newsize = (int(widthnew), int(heightnew))
                        imgfile = imgfile.resize(newsize)
                        imgfile = imgfile.save(bilddatei)
                    elif height > width:
                        verhaeltnis = width * 100 / height
                        heightnew = 1024
                        widthnew = verhaeltnis * heightnew / 100
                        newsize = (int(widthnew), int(heightnew))
                        imgfile = imgfile.resize(newsize)
                        imgfile = imgfile.save(bilddatei)
        os.chdir("..")

Drucke diesen Beitrag

  Andere Bildformate nach jpg konvertieren
Geschrieben von: Joopi - 23-01-2023, 04:43 - Forum: Programmieren - Keine Antworten

Grundsätzlich arbeite ich mit Bildern im jpeg-Format. Das betrifft war nicht die raw-Dateien aus der Fotografie, aber eben alle anderen Bilder. Sollte mir andere Bildformate vorliegen, so konvertiere ich diese in jpeg-Format.

Mit dem Tool convert in der Konsole ist das relativ einfach. In Python aber nicht. Hier muss bedacht werden, dass eine echte Konvertiertung nicht stattfindet, sondern ein neues Abspeichern. Dabei treten Probleme auf, die es unter convert so nicht gibt.

So ist z.B. zu beachten, dass png-Bilder einen transparenten Hintergrund haben können, jpeg-Bilder allerdings nicht. Daher ist der Alphakanal eines png-Bildes zu löschen. Das geht mit der Konvertierung von RGBA nach RGB. Ansonsten würde sich ein Bilder neu unter dem jpeg-Format nicht speichern lassen, wenn es in einem Pythonskript erfolgen soll.

Folgender Codeschnipsel läuft im Moment bei mir reibungslos (die Ursprungsdatei wird gelöscht!).

Code:
import os
import pathlib
from PIL import Image

for bildordner in pathlib.Path(rename_ordner).iterdir():
    if bildordner.is_dir():
        os.chdir(bildordner)
        for bilddatei in pathlib.Path(os.getcwd()).iterdir():
            if bilddatei.is_file():
                filename, file_extension = os.path.splitext(bilddatei)
                ext = file_extension
                if ext != ".jpg":
                    # print(bilddatei)
                    # print(ext)
                    # print(filename)
                    imgfile = Image.open(rf"{bilddatei}")
                    imgfile = imgfile.convert("RGB")
                    imgfile.save(rf"{filename}{extneu}")
                    os.remove(bilddatei)
        os.chdir("..")

Drucke diesen Beitrag

  Korrupte Bilddateien erkennen und löschen
Geschrieben von: Joopi - 23-01-2023, 04:01 - Forum: Programmieren - Keine Antworten

Ich durchforste immer wieder meine Bilder (Fotos), ob ggfs. korrupte Dateien dabei sind. Wenn diese Dateien schon kaputt sind, bemühe ich mich auch nicht mehr, diese zu prüfen und ggfs. aufwendig zu reparieren. Mit dem folgenden Codeschnipsel werden solche Dateien erkannt und gelöscht.

Code:
import os
import pathlib
from PIL import Image

for bildordner in pathlib.Path(rename_ordner).iterdir():
    if bildordner.is_dir():
        os.chdir(bildordner)
        for bilddatei in pathlib.Path(os.getcwd()).iterdir():
            if bilddatei.is_file():
                try:
                    imgfile = Image.open(bilddatei)
                    imgfile.verify()
                except (IOError, SyntaxError) as e:
                    print(bilddatei)
                    os.remove(bilddatei)
        os.chdir("..")

Drucke diesen Beitrag

  Unerwünschte Endung in Ordnernamen entfernen
Geschrieben von: Joopi - 22-01-2023, 08:56 - Forum: Programmieren - Keine Antworten

Dann und wann schleichen sich bei der Arbeit mit vielen Bildern in vielen Ordner leider Ordernamen ein, die nicht erwünscht sind. Diese sollen entfernt werden. Die unerwünschten Endungen stehen dabei in einer Liste, die dann je Ordner abzuarbeiten ist.

Code:
trash_endung = [".jpg", "_001.jpg", "_002.jpg", "(1).jpg", "(1).jpeg", "_1_.jpg", "_2_.jpg", "_1.jpg", ".jpeg", "yenc", "yEnc", ".par2", ".zip", ".rar"]

for bildordner in pathlib.Path(rename_ordner).iterdir():
    if bildordner.is_dir():
        basename = os.path.basename(bildordner)
        for endung in trash_endung:
            basename = basename.replace(endung, "")

Eine andere Möglichkeit wäre, die str.endswith() Methode zu verwenden, um zu überprüfen, ob der Name des Ordners mit einer unerwünschten Endung endet, und dann die entsprechende Endung zu entfernen.

Code:
trash_endung = [".jpg", "_001.jpg", "_002.jpg", "(1).jpg", "(1).jpeg", "_1_.jpg", "_2_.jpg", "_1.jpg", ".jpeg", "yenc", "yEnc", ".par2", ".zip", ".rar"]

for bildordner in pathlib.Path(rename_ordner).iterdir():
    if bildordner.is_dir():
        basename = os.path.basename(bildordner)
        for endung in trash_endung:
            print(endung)
            if basename.endswith(endung):
                basename1 = basename[:-len(endung)]
                os.rename(f"{rename_ordner}/{basename}", f"{rename_ordner}/{basename1}")
                break

Drucke diesen Beitrag

  Die Bestandteile von Ordner und Datei
Geschrieben von: Joopi - 22-01-2023, 07:49 - Forum: Programmieren - Keine Antworten

Dann und wann ist es wichtig, dass nur der Dateiname oder nur die Extension einer Datei zur Verfügung steht. Dazu dienen folgende Codezeilen:

Code:
filename = os.path.splitext("/media/user/index.html")

Ausgabe:

Zitat:Das ist filename:  /media/user/index




Code:
file_extension = os.path.splitext("/media/user/index.html")

Ausgabe: 

Zitat:Das ist file_extension:  .html




Code:
basename = os.path.basename("/media/user/index.html")

Ausgabe:

Zitat:Das ist basename:  index.html

Drucke diesen Beitrag

Exclamation Arbeitsverzeichnis prüfen
Geschrieben von: Joopi - 22-01-2023, 07:07 - Forum: Programmieren - Keine Antworten

Vor längerer Zeit hatte ich mal aus Unachtsamkeit mit Home-Verzeichnis geschrottet. Seitdem bin ich sehr vorsichtig, wenn ich auf meinem Hauptrechner programmiere und mich im Bereich der Ordner und Dateien bewege. Mittlerweile prüfen ich in dem Skript, ob das aktuelle Arbeitsverzeichnis nicht das Home-Verzeichnis ist.

Code:
def homedir_pruefen():
    if os.getcwd() == "/home/user":
        print(os.getcwd())
        sys.exit("Das falsche Arbeitsverzeichnis ist ausgewählt: /home/user")
    return

homedir_pruefen()

Der Vergleich Arbeitsordner und  Home-Ordner darf nicht mit einem Schrägstrich enden, da getcwd ihn auch nicht hat.
Bei der Angabe des Homeverzeichnisses darf am Ende kein / gesetzt werden, da os.getcwd() diesen auch nicht ausgibt.

Drucke diesen Beitrag

Lightbulb Tilix mit Layout starten
Geschrieben von: Joopi - 17-01-2023, 05:19 - Forum: Linux - Keine Antworten

Tilix ist ein Tiling-Manager und erlaubt es, verschiedene Terminfenster zu organisieren.

Derzeit nutze ich zwei Sessions, die jeweils in einer json-Datei gespeichert sind. Um diese beiden Sessions z.B. aus dem KDE-Menü zu starten, ist folgender Befehl notwendig, um direkt die Layout nutzen zu können:

Code:
tilix --session <pfad_zur_json_datei>/dateiname.json

Somit muss ich erst über das Tilix-Menü die json-Datei suchen und dann öffnen.

Drucke diesen Beitrag

  Niemand kann alles wissen, auch ChatGPT nicht
Geschrieben von: Joopi - 16-01-2023, 11:52 - Forum: Blog - Keine Antworten

Ich habe eine vermeindlich einfache Frage gestellt. 

Welchen Codenamen wird die nächste stabile Version von Debian haben?

Zitat:Ich habe keine Informationen darüber, welchen Codenamen die nächste stabile Version von Debian haben wird. Debian-Veröffentlichungen werden in der Regel alle zwei Jahre veröffentlicht und haben in der Regel einen Namen, der mit einem Buchstaben des Phonetischen Alphabets beginnt. Derzeit ist die aktuelle stabile Version von Debian "Bullseye" und die vorherige Version "Buster". Der Name der nächsten Version wird von Debian-Entwicklern bekannt gegeben, sobald er verfügbar ist.

Das ist leider falsch. Der nächste Codename "Bookworm" lauten. Das wusstest Du nicht?


Zitat:Es tut mir leid, dass ich die Informationen nicht aktueller hatte. Es ist richtig, dass der nächste Codename der stabile Version von Debian "Bookworm" lautet und es wurde offiziell von den Debian Entwicklern bestätigt. Ich entschuldige mich für die Verwirrung und irrtümliche Informationen.

Irgendwie hat das den Reiz, als würde ein Schachspieler gegen einen Schachcomputer spielen. Ok, ich kann kein Schach, aber komischen Fragen stellen.  Angel

Drucke diesen Beitrag

Information ChatGPT - Irrsinn oder Wahnsinn
Geschrieben von: Joopi - 14-01-2023, 10:51 - Forum: Blog - Keine Antworten

Heute habe ich mich erstmals etwas intensiver mit dem Chatprogramm ChatGPT befasst. Das browserbasierte Tool ist noch in der Erprobung, daher kann nicht alles funktionieren. Und das tut es auch nicht.

Allerdings, und das deckt sich mit den Eindrücken, die ich in diversen Videos erhalten konnte, ist ChatGPT in der Tat ein irrsinnig umfangreicher Wissensspeicher. Ich habe so einiges eingegeben und habe, soweit ich das ermitteln kann, richtige Antworten bekommen.

Allerdings fiel mir auf, dass die Antworten nicht immer vollständig ausgeschrieben wurden. Ich gehe mal davon aus, dass derzeit die Auslastung sehr hoch und die Technik noch nicht so umfangreich und skaliert ist, dass der Massenansturm bewältigt werden kann.

Zudem gab es häufig diesen Hinweis:

   

Es erschien mir zunächst so, dass sich das auf mich bezog. Ok, dachte ich, warte mal ab und versuche es noch einmal. Wenn ich mich dann wieder daran setzte, gab es den Hinweis, dass die Kapazitäten ausgeschöpft seien.

   

Fazit:

Für mich also Otto-Normal-Verbraucher erscheint ChatGPT wie ein Wunderwerk wie analog damals zu WikePedia in den Anfängen. Ob und wie sich diese Art der Wissensvermittlung durchsetzen kann, wird sich noch zeigen müssen. Die Angst der Softwareentwickler und -programmierer kann ich verstehen, auch wenn ich nicht daran glaube, dass es hier zu Massenentlassungen kommen wird.

Drucke diesen Beitrag

  KDE - Python aus Menü starten
Geschrieben von: Joopi - 14-01-2023, 04:15 - Forum: Linux - Keine Antworten

Seit einiger Zeit schreibe ich eigene Python-Skripte, die mir einiges an Arbeit abnehmen. An Python habe ich richtig Spaß gefunden.

Python-Skripte, die in einem Linuxsystem ihre Arbeit tun sollen, werden normalerweise direrkt aus der Konsole gestartet:

Code:
python3 pythonskript.py

Wenn man nur zwei oder drei Skripte hat, dann ist das auch kein Thema. Bei mir häufen sich die Skripte aber nun, denn ich möchte mit jedem einzelnen Skript nur eine in sich abgeschlossene Aktion ausführen lassen.

Es ist so gesehen kein Akt, im KDE-Menü eigene Programm einzubauen. Shell-Skripte (*.sh) sind einfach in den Menübaum einzutragen und schon werden diese in einem Terminalfenster ausgeführt.

Python-Skripte jedoch werden in einer Shell gestartet und dann ausgeführt, also muss auch erst ein Terminalfenster gestartet werden. Einfach so ein Python-Skript in den Menübaum hängen, wird nicht wirklich gut funktionieren.

Ich habe mir damit geholfen, dass ich einen Shell-Wrapper programmiert habe (Idee aus dem Internet aufgenommen). Dieser sieht wie folgt aus:

Code:
#!/usr/bin/bash
#
#*********************************************************************************************
# Datum: 13.01.2023
# Dateiname: _terminal_wrapper.sh
# Autor: Jopii
#
#*********************************************************************************************
#
bash python3 $1

Damit wird zunächst Python in der Shell gestartet.

Wichtig ist aber nun, dass die Einstellung zum Dateityp (hier: .py) geändert wird. Diese ist nämlich jetzt auf die Python-Skripte auszurichten.

   

Sodann kann das Python-Skript in das KDE-Menü eingehangen werden. Das hat bei mir einige Zeit gedauert bis mir klar war, wie ich das machen muss. Aber letztlich hat es wirklich funktioniert.

   

Hier ist zu beachten, dass der komplette Pfad zur Skriptdatei angegeben wird. Ansonsten kann es zu Komplikationen kommen.

Im Reiter Erweitert ist dann noch der Haken bei Im Termin starten zu setzen, aber nichts in die Befehlszeile einzutragen.

Ob dieses Vorgehen immer und überall funktioniert, kann ich nicht sagen. Bei mir unter Kubuntu 20.04 LTS läuft es jetzt gut. Und darüber bin ich doch sehr froh.

Ein Nachteil bei der Sache ist, dass das Terminalfenster nach der Ausführung des Python-Skripts sofort geschlossen wird. Es gibt zwar Mittel und Wege (z.B. konsole --noclose -e), um dieses zu verhindern, aber die haben mich nicht überzeugt.

Nach der Beendigung des ein oder anderen Python-Skripts möchte ich gerne sehen, ob es eine Meldung gibt, die ich eingebaut habe. Daher habe ich in den Skripten, die nicht sofort nach der Ausführung verschwinden sollen, einfach ein Sleep von wenigen Sekunden eingebaut.

Code:
import time

time.sleep(10)  # Das Skript wird 10 Sekunden angehalten.

Andere Meldungen werden gesammelt und im Bedarfsfalle über das interne Mailsystem einfach in meinem Postfach abgelegt. Auch das war eine gute Übung für mich und meinen neuen Freund Python!

Drucke diesen Beitrag