Загрузить изображение в Imgur после изменения размера в PIL

Я пишу скрипт, который будет получать изображение по ссылке. Затем изображение будет изменено с помощью модуля PIL и загружено в Imgur с помощью модуля pyimgur. Я не хочу сохранять изображение на диске, вместо этого манипулирую изображением в памяти, а затем загружаю его из памяти в Imgur. Сценарий:

from pyimgur import Imgur
import cStringIO
import requests
from PIL import Image

LINK = "http://pngimg.com/upload/cat_PNG106.png"
CLIENT_ID = '29619ae5d125ae6'
im = Imgur(CLIENT_ID)

def _upload_image(img, title):
    uploaded_image = im.upload_image(img, title=title)
    return uploaded_image.link

def _resize_image(width, height, link):
    #Retrieve our source image from a URL
    fp = requests.get(link)
    #Load the URL data into an image
    img = cStringIO.StringIO(fp.content)
    im = Image.open(img)
    #Resize the image
    im2 = im.resize((width, height), Image.NEAREST)
    #saving the image into a cStringIO object to avoid writing to disk
    out_im2 = cStringIO.StringIO()
    im2.save(out_im2, 'png')
    return out_im2.getvalue()

Когда я запускаю этот сценарий, я получаю эту ошибку: TypeError: file() argument 1 must be encoded string without NULL bytes, not str У кого-нибудь есть решение?


person jjjj    schedule 13.10.2014    source источник
comment
возможный дубликат TypeError при попытке загрузить изображения из Google App Engine в Picasa с помощью GData API   -  person Magnus Hoff    schedule 13.10.2014


Ответы (1)


Похоже на ту же проблему, что и this, и решение состоит в использовании StringIO.

Обычный совет по поиску таких проблем — поиск по общей части сообщения/строки об ошибке.

person Hemanth    schedule 13.10.2014
comment
Как насчет im2.save(out_im2, format=PNG)? Я имею в виду stackoverflow.com/questions/646286/ - person Hemanth; 14.10.2014