Форум сайта python.su
Добрый день.
У меня есть рабочий код, но необходимо немного его оптимизировать. (Данный код писал сам, так что не халявщик)
Что я делаю:
Беру нудный URL картинки и сохраняю картинку в папке, далее открываю и если она не подходящего формата, изменяю её на подходящий, сохраняю, открываю её и накладываю вотермарк, сохраняю заменяя прошлую, далее открываю и изменяю её размеры, сохраняю.
Все действия быстро выполняются, кроме первого сохранения её с оригинала:
urllib.urlretrieve(IMG_URL, '' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
urllib.urlretrieve(IMG_URL, '' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
img = Image.open('' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
img = img.convert('RGB')
img.save('' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
wm = Image.open("1.png")
add_watermark(img, wm, 1, 50).save('' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
img = Image.open('' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
thumbs = ()
thumbs += create_thumbnails(img, (300,))
thumbs[0].save('' + str(DATA_DIR) + '/' + str(ID) + '.jpg')
Офлайн
Намек: PIL.Image.open принимает file like object в качестве первого параметра.
Должен быть двоичный, с поддержкой методов .read, .seek и .tell
Офлайн
Андрей Светловможно чуть проще
Намек: PIL.Image.open принимает file like object в качестве первого параметра.
import ImageFile
p=ImageFile.Parser()
p.feed(image_data)
img=p.close()
Офлайн
Да, так лучше. Забыл совсем
Офлайн
УРА, УРА!!
Огромное спасибо. Вот это круто, теперь весь код в 1с выполняется. Если бы вы знали сколько времени сэкономили…
И приведу код который реально использовал, взял за основу код от igor.kaist
Применительно к исходному коду, который выкладывал в заголовном сообщении:
f = urllib.urlopen(IMG_URL)
p = ImageFile.Parser()
while True:
s = f.read(1024)
if not s:
break
p.feed(s)
img = p.close()
Офлайн
KarDer_GroomЧитаем (загружаем) следующие 1024 байта и скармливаем их парсеру. p.close() говорит парсеру “хватит, я закончил” :)
Если кому не сложно и кто чётко понимает, прокомментируйте пожалуйста строки:
s = f.read(1024)
p.feed(s)
Люблю когда понимаю весь код.
Офлайн
я делал так
import urllib2
import StringIO
import Image
...
img = urllib2.urlopen("http://path_to_image")
img = img.read()
img = StringIO.StringIO(img)
img = Image.open(img)
Офлайн
RMNX.rcбудет чуть медленней и больше оперативной памяти займет…
Не знаю насчет быстродействия
Офлайн