Python: конвертировать Base64 кодированное изображение PNG в JPG - PullRequest
8 голосов
/ 06 августа 2011

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

import base64 
pngraw = base64.decodestring(png_b64text)

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

Ответы [ 2 ]

19 голосов
/ 06 августа 2011

Вы можете использовать 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.

5 голосов
/ 06 августа 2011

Справа от учебника 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, и оно автоматически преобразует изображение.

...