2013-12-26 3 views
0

Так что я смотрел на this question и получил следующий код от него:Как уменьшить размер файла изображения в python?

import Image, ImageFile 
pic = pic/goes/here.jpg 
im = Image.open(pic) 
width, height = im.size 
if width > 1000 or height > 1000: 
    width = width*.7 
    height = height*.7 
im = im.resize((int(math.floor(width)), int(math.floor(height))), Image.ANTIALIAS) 
try: 
    im.save(pic,optimize=True,quality=80) 
except IOError: 
    ImageFile.MAXBLOCK = width * height 
    im.save(pic,optimize=True,quality=80) 

Последний бит в конце пришел из this question, как я заметил, PIL только отчасти сдался, когда файл превысил около 1500 ~ точек размера (Я не знаю, почему?)

Проблема заключается в том, что когда я запускаю этот код с изображением примерно 2500x1600, PIL либо дает мне изображение того же размера (1,2 МБ), либо пустой файл с 0 МБ. У меня когда-то был файл, который был больше!?!? (1.38MB)

Так что я делаю неправильно? Я просто хочу оптимизировать изображение до размера файла без потери качества на 80%.

Также любые другие способы уменьшить размер файла в python? Благодаря!!

+1

После сброса 'ImageFile.MAXBLOCK' после' IOError' вам нужно выполнить другое 'im.save()' с его помощью. – martineau

+0

Ваш код не заполнен; 'pic' нигде не установлен. –

+0

Извините! Не заметил, что я взял этот бит из функции, теперь исправлено спасибо @martineau! Я собираюсь сделать еще несколько тестов, и это может быть проблемой. – bnynn

ответ

0

Я опаздываю здесь, но я заметил, что у вас установлено качество 80. По умолчанию 75. Это может быть причиной того, что ваш файл был больше.

+0

lol только 4 года позднего nbd. Я думаю, что в то время я решил использовать другую библиотеку для сжатия изображения. – bnynn

Смежные вопросы