Umwandeln von HEIC Bildern in JPG Bilder

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tauchmann
User
Beiträge: 2
Registriert: Mittwoch 27. Juli 2022, 16:07

Hallo zusammen,

ich bin nun endlich bei meinem allerersten Python Projekt angekommen. Bitte entschuldigt wenn meine Fragen vielleicht etwas sehr einfach sind, aber die ersten Schritte sind echt nicht einfach.

Ich war im Urlaub und die Bilder die mein Handy aufgenommen hat sind im HEIC Format, möchte aber das die Bilder in JPG gespeichert werden. Nach etwas googlen soll das gut per Pillow gehen, aber aus irgendeinen Grund möchte der Code aus dem Netz einfach nicht funktionieren. Könnt Ihr Profis mir helfen und sagen woran es liegt? Ich möchte gerne ein Screenshot hochladen der das Problem zeigt und selbst das bekomme ich nicht hin :oops: . Wie kann ich ein Bild das auf den Desktop liegt hier hochladen???

Schöne Grüße
Tauchmann

PS: ... so geht es schon mal nicht
[img]C:\Users\M\Desktop\2024-06-10_20h18_05.jpg[/img]
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt eines Bildes solltest Du hier den Code als Text, inklusive der kompletten Fehlermeldung posten.
Benutzeravatar
sparrow
User
Beiträge: 4529
Registriert: Freitag 17. April 2009, 10:28

Und das bitte in Code Tags.
Die erscheinen, wenn du im "vollständigen Editor" </> drückst. Zwischen die Tags gehört jeweils dein Quelltext und die komplette Fehlermeldung.
Tauchmann
User
Beiträge: 2
Registriert: Mittwoch 27. Juli 2022, 16:07

Hallo Sirius3, Hallo sparrow,

vielen Dank für Eure Antworten und das erstmal das Organisatorische geklärt werden kann :) . Kann man hier im Forum auch Screenshots vom Desktop irgendwie hochladen?
Wie auch immer, dann bin ich mal auf die Lösung gespannt. Bitte lasst mich wissen wenn ihr noch etwas braucht.

Euch allen ein schönes Wochenende.
Tauchmann

Hier wäre der Code:

Code: Alles auswählen

from PIL import Image
import os

# Get list of HEIF and HEIC files in directory
directory = 'C:/Users/M/Desktop/test'
files = [f for f in os.listdir(directory) if f.endswith('.HEIC')]

print (files)

# Convert each file to JPEG
for filename in files:
    image = Image.open(os.path.join(directory, filename))
    image.convert('RGB').save(os.path.join(directory, os.path.splitext(filename)[0] + '.jpg'))
Und hier wäre die Fehlermeldung:

Code: Alles auswählen

---------------------------------------------------------------------------
UnidentifiedImageError                    Traceback (most recent call last)
Cell In[7], line 13
     11 # Convert each file to JPEG
     12 for filename in files:
---> 13     image = Image.open(os.path.join(directory, filename))
     14     image.convert('RGB').save(os.path.join(directory, os.path.splitext(filename)[0] + '.jpg'))

File ~\anaconda3\envs\Martin\Lib\site-packages\PIL\Image.py:3339, in open(fp, mode, formats)
   3337     warnings.warn(message)
   3338 msg = "cannot identify image file %r" % (filename if filename else fp)
-> 3339 raise UnidentifiedImageError(msg)

UnidentifiedImageError: cannot identify image file 'C:\\Users\\M\\Desktop\\test\\IMG_8537.HEIC'
Benutzeravatar
sparrow
User
Beiträge: 4529
Registriert: Freitag 17. April 2009, 10:28

Da steht ja, warum es nicht geht: "cannot identify image".
Pillow kennt das Format nicht.
Aber es gibt wohl das Modul pillow-heif, welches das nachliefert.
Benutzeravatar
__blackjack__
User
Beiträge: 14005
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Tauchmann: Die Funktionen in `os` und `os.path` die sich auf Pfade beziehen, sollte man nicht mehr verwenden. Dafür gibt es das `pathlib`-Modul.

Ungetestet (es fehlt natürlich auch noch das ”nachrüsten” des HEIC-Formats):

Code: Alles auswählen

#!/usr/bin/env python3
from pathlib import Path

from PIL import Image


def main():
    directory = Path("C:/Users/M/Desktop/test")
    file_paths = list(directory.glob("*.HEIC"))
    print(file_paths)
    for file_path in file_paths:
        Image.open(file_path).convert("RGB").save(
            file_path.with_suffix(".jpg")
        )


if __name__ == "__main__":
    main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten