Montag, Januar 27, 2020

python: Konvertieren von PNG zu JPG ohne speichern der Datei auf den Datenträger mit PIL

In meinem Programm brauche ich um zu konvertieren eine .png Datei zu .jpg Datei, aber ich nicht wollen, speichern Sie die Datei auf der Festplatte.
Derzeit nutze ich

>>> from PIL import Imag
>>> ima=Image.open("img.png")
>>> ima.save("ima.jpg")

Aber dieser speichert die Datei auf der Festplatte. Ich dont wollen, speichern Sie diese auf der Festplatte aber habe es umgewandelt .jpg als ein Objekt. Wie kann ich es tun?

  • Was willst du mit ihm danach? Ich würde vermuten Sie wollen, speichern Sie es auf ein StringIO-Objekt, wenn Sie möchten, um z.B. schicken Sie es als Teil einer HTML-Antwort, aber Sie könnten eine weitere nützliche Antwort, wenn Sie besser, beschreiben Sie Ihren Anwendungsfall
  • ich brauche nur zu verwenden, dass .jpg Objekt in oreder zu tun, einige scipy Operationen.
  • Und nur um zu überprüfen, pro prancer.physics.louisville.edu/astrowiki/index.php/…, „SciPy Lesen können jpg-und png-Bilder direkt, ohne Verwendung von PIL. Mit SciPy Bilder in numpy-arrays, und wir haben direkten Zugriff auf die Daten für andere als die Visualisierung. „so eher als unter Verwendung der PIL, sollten Sie in der Lage sein, nur das zu tun, image_data = imread(‚test.jpg‘).astype(np.float32) und tun SciPy Operationen mit es…, es sei denn, du hast speziell etwas zu tun mit dem jpeg-Header?
  • Ja. Ich mit mit es wie dass(.png in scipy), aber einige .png Datei neigen dazu, geben, Fehler, einigen seltenen. So mag ich Sie zu konvertieren .jpg
InformationsquelleAutor Vivek | 2015-07-14

2 Kommentare

  1. 12

    Können Sie tun, was Sie versuchen, mit BytesIO von io:

    from io import BytesIO
    
    def convertToJpeg(im):
        with BytesIO() as f:
            im.save(f, format='JPEG')
            return f.getvalue()
  2. 4

    Verbesserung der Antwort von Ivaylo:

    from PIL import Image
    from io import BytesIO
    
    ima=Image.open("img.png")
    
    with BytesIO() as f:
       ima.save(f, format='JPEG')
       f.seek(0)
       ima_jpg = Image.open(f)

    Diese Weise ima_jpg ist ein Image-Objekt.

    • Ich bin immer der Fehler OSError: cannot write mode RGBA as JPEG
    • JPEG nicht unterstützt RGBA (alpha-Kanal)

Kostenlose Online-Tests