python: преобразование изображения PNG в кодировке base64 в jpg

Я хочу преобразовать некоторые закодированные base64 png-изображения в jpg с помощью python. Я знаю, как декодировать из base64 обратно в raw:

import base64 
pngraw = base64.decodestring(png_b64text)

но как я могу преобразовать это сейчас в JPG? Просто запись pngraw в файл, очевидно, дает мне только png-файл. Я знаю, что могу использовать PIL, но как именно я это сделаю? спасибо!

2 ответов


можно использовать PIL:

data = b'''iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAIBJRE
          FUOMvN08ENgCAMheG/TGniEo7iEiZuqTeiUkoLHORK++Ul8ODPZ92XS2ZiADITmwI+sWHwi
          w2BGtYN1jCAZF1GMYDkGfJix3ZK8g57sJywteTFClBbjmAq+ESiGIBEX9nCqgl7sfyxIykt
          7NUUD9rCiupZqAdTu6yhXgzgBtNFSXQ1+FPTAAAAAElFTkSuQmCC'''

import base64
from PIL import Image
from io import BytesIO

im = Image.open(BytesIO(base64.b64decode(data)))
im.save('accept.jpg', 'JPEG')

в очень старых версиях Python (2.5 и старше) замените b''' С ''' и from io import BytesIO С from StringIO import StringIO.


прямо из учебника PIL:

чтобы сохранить файл, используйте метод save класса Image. При сохранении файлов, имя становится важным. Если формат не указан, библиотека использует расширение имени файла для определения формата хранения файлов.

конвертировать файлы в JPEG

import os, sys
import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            Image.open(infile).save(outfile)
        except IOError:
            print "cannot convert", infile

поэтому все, что вам нужно сделать, это установить расширение для .jpeg или .jpg и он автоматически преобразует изображения.