Liebe Mitgrowerinnen und Mitgrower,
hier findet Ihr ein Python-Script, das Bilder von JPG/JPEG in PNG konvertiert, sie verkleinert und die sämtliche Metadaten löscht.
Das Programm ist nicht destruktiv (löscht und verändert die Originalbilder nicht).
Da ich das geschrieben habe, gebe ich hiermit bekannt, dass dieses Python-Script zum Public Domain gehört. Jeder kann es einsetzen, verändern und weitergeben.
Um das Script zum Laufen zu bringen, kopiert es einfach heraus in ein Texteditor und speichert Ihr als PY-Datei (zum Beispiel Bildverarbeiter.py).
Viel Spaß damit.
################################################################################
# Das ist ein Programm, das JPG/JPEG-Bilddateien verkleinert und ohne seine #
# Metadaten im PNG-Format abspeichert. #
# #
# Geschrieben wurde es von einem Kiffer, um Bilder zu bearbeiten, bevor diese #
# auf das Forum von cannabisanbauen.net hochgeladen werden. #
# #
# Um es zu starten, braucht Ihr Python auf Eurem Rechner zu installieren und #
# das Bibiothek PIL (pillow) herunterzuladen. #
# #
# Da der Autor verständlicher Weise anonym bleiben möchte, gibt es keinerlei #
# Garantie oder Gewährleistung oder wie auch immer zu diesem Code. #
# #
# Der Einsatz dieses Programmes erfolg auf eigener Gefahr. #
################################################################################
# Die entsprechende Module werden importiert
# ------------------------------------------------------------------------------
# BEGIN
import os
import tempfile
from os import listdir
from os.path import isfile, join
from PIL import Image
from PIL import ExifTags
from PIL.ExifTags import TAGS
from pathlib import Path
# ENDE
# ------------------------------------------------------------------------------
# Konfiguration bzw. Parameter
# ------------------------------------------------------------------------------
# BEGIN
# Hier den Pfad zum Verzeichnis, wo sich das Rohbilder befinden, eingeben
QUELLVERZEICHNIS = "D:\\Bearbeitung\\Bilder\\Quelle"
# Hier den Pfad zum Zielverzeichnis, wo die bearbeiteten Bildern gespechert werden sollen, eingeben
ZIELVERZEICHNIS = "D:\\Bearbeitung\\Bilder\\Ziel"
# Hier den Verkleinerungsfaktor eigeben
FAKTOR = 0.3
#ENDE
# ------------------------------------------------------------------------------
# Diese Funktion zeigt an Dimensionen und Metadaten eines Bildes
# ------------------------------------------------------------------------------
# BEGIN
def ZeigeBilddaten(bild):
print(" 1. Dimensionen")
print(" Höhe: ", bild.height, ", Breite: ", bild.width)
print()
print(" 2. Metadaten")
metadaten = bild.getexif()
metadatenSucher = {i.value: i.name for i in ExifTags.IFD}
for name, wert in metadaten.items():
if name in metadatenSucher:
ifd_name = metadatenSucher[name]
ifd_wert = metadaten.get_ifd(name).items()
for sub_schluessel, sub_wert in ifd_wert:
sub_name = ExifTags.GPSTAGS.get(sub_schluessel, None) or ExifTags.TAGS.get(sub_schluessel, None) or sub_schluessel
print(f" {sub_name}: {sub_wert}")
else:
print(f" {ExifTags.TAGS.get(name)}: {wert}")
print()
#ENDE
# ------------------------------------------------------------------------------
# Diese Funktion verkleinert ein Bild
# ------------------------------------------------------------------------------
# BEGIN
def BildVerkleinern(bild):
hoehe, breite = bild.size
dimensionen = int(FAKTOR * hoehe), int(FAKTOR * breite)
print(" 3. Das bild wird auf ", dimensionen, "verkleinert")
print()
verkleinertesBild = bild.resize(dimensionen, Image.LANCZOS)
return verkleinertesBild
#ENDE
# ------------------------------------------------------------------------------
# Diese Funktion erstellt eine Kopie des Bildes, ohne die Metadaten daraus zu
# übernehmen.
# ------------------------------------------------------------------------------
# BEGIN
def BildBereinigen(bild):
print(" 4. Alle Metadaten werden entfernt")
print()
bildDaten = list(bild.getdata())
bereinigtesBild = Image.new(bild.mode, bild.size)
bereinigtesBild.putdata(bildDaten)
return bereinigtesBild
#ENDE
# ------------------------------------------------------------------------------
# Das ist der Hauptteil des Programms. Hier startet die Ausführung.
# ------------------------------------------------------------------------------
# Die Begrüßung wird angezeigt
print("********************************************************************************")
print("* WILKOMMEN ZUM BILDKONVERTER UND BEREINIGER *")
print("* version 0.1 *")
print("********************************************************************************")
print()
# Quell- und Zielverzeichnis werden angezeigt
print("Quellverzeichnis ................ ", QUELLVERZEICHNIS)
print("Zielverzeichnis ................. ", ZIELVERZEICHNIS)
print()
# Sämtliche JPG/JPEG-Dateien aus dem Quellverzeichnis werden aufgelistet
quellDateien = []
quellDateien += [each for each in os.listdir(QUELLVERZEICHNIS) if (each.upper().endswith('.JPG') or each.upper().endswith(".JPEG"))]
# Wenn mindestens eine Datei gefunden wurde, wird die Liste abgearbeitet
if(len(quellDateien) > 0):
quellGroesse = 0
print("Es wurden ", len(quellDateien), " JPG/JPEG Datei(en) im Quellverzeichnis gefunden")
print()
print("+++++++++++++++++++++++++++++++ KONVERTIERUNG ++++++++++++++++++++++++++++++++++")
print()
for quellDatei in quellDateien:
quellDateiname = QUELLVERZEICHNIS + "\\" + quellDatei
quellGroesse += os.path.getsize(quellDateiname)
print("--------------------------------------------------------------------------------")
print("Die Datei ", quellDatei, " wird bearbeitet.")
print("--------------------------------------------------------------------------------")
bild = Image.open(quellDateiname)
ZeigeBilddaten(bild)
verkleinertesBild = BildVerkleinern(bild)
bereinigtesBild = BildBereinigen(verkleinertesBild)
zielDatei = Path(quellDatei).stem
zeilDateiname = ZIELVERZEICHNIS + "\\" + zielDatei + ".png"
print(" 5. Das Bild wird im PNG-Format gespeichert.")
bereinigtesBild=bereinigtesBild.rotate(270, expand=True)
bereinigtesBild.save(zeilDateiname, dpi=(96, 96))
print()
print("Insgesamt", len(quellDateien), "Datei(en) mit einer Gesammtgröße von", quellGroesse, " Bytes wurden konvertiert.")
print("--------------------------------------------------------------------------------")
print()
print("++++++++++++++++++++++++++++++++ GEGENPROBE ++++++++++++++++++++++++++++++++++++")
print()
zielDateien = []
zielDateien += [each for each in os.listdir(ZIELVERZEICHNIS) if each.upper().endswith('.PNG')]
if(len(quellDateien) != len(zielDateien)):
print("++++++ ACTHUNG: Es gibt ", len(quellDateien), " und ", len(zielDateien), "!")
else:
print("Alle ", len(quellDateien), " Datei(en) wurden erfolgreich konvertiert.")
print()
zielGroesse = 0
for zielDatei in zielDateien:
zielDateiname = ZIELVERZEICHNIS + "\\" + zielDatei
zielGroesse += os.path.getsize(zielDateiname)
print("--------------------------------------------------------------------------------")
print("Die Datei ", zielDatei, " wird überprüft.")
print("--------------------------------------------------------------------------------")
bild = Image.open(zielDateiname)
ZeigeBilddaten(bild)
print()
print("Insgesamt", len(zielDateien), "Datei(en) mit einer Gesammtgröße von", zielGroesse, " Bytes wurden gefunden.")
groessenReduktion = 100 * ((zielGroesse - quellGroesse) / quellGroesse)
print("Die Größenänderung beträgt", '{:.2f}'.format(groessenReduktion), "%.")
# Wenn keine Dateien im Quellverzeichnis gefunden wurden, gibt es eine Warnung
else:
print("++++++ ACTHUNG: Es gibt keine JPG/JPEG Dateien im Quellverzeichnis.")
# Das Programm endet hier
print()
print("ENDE DES AUSDRUCKS")
print("ENDE DES PROGRAMMS")
print("********************************************************************************")
