Seite 1 von 1

Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Montag 10. Juni 2024, 19:50
von Tauchmann
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]

Re: Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Dienstag 11. Juni 2024, 21:26
von Sirius3
Statt eines Bildes solltest Du hier den Code als Text, inklusive der kompletten Fehlermeldung posten.

Re: Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Mittwoch 12. Juni 2024, 04:36
von sparrow
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.

Re: Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Freitag 14. Juni 2024, 19:34
von Tauchmann
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'

Re: Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Freitag 14. Juni 2024, 20:25
von sparrow
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.

Re: Umwandeln von HEIC Bildern in JPG Bilder

Verfasst: Freitag 14. Juni 2024, 21:55
von __blackjack__
@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()