Сохранение информации о типе изображения в PIL при кадрировании - PullRequest
2 голосов
/ 12 марта 2012

Я использую отличную модификацию Python's PIL от Etienne отсюда .Что мне нужно, так это то, что делает модификация - чтобы сохранить файл JPEG, используя те же таблицы квантования, что и оригинал.Выполнение этого изменения кажется элегантным, в настоящее время я достигаю этого, используя сборку кода С.

Моя проблема заключается в том, что я получаю объект файла JPEG в PIL, но после любого изменения он становится объектомкакой-то другой тип.Я хочу взять изображение, обрезать его и сохранить с той же таблицей квантования.

Я пытаюсь:

img = Image.open("someimage.jpg")
width, height = img.size
crop = img.crop((8, 0, width, height))
img = img.resize((width - 8, height))
img.paste(crop, (0,0))
img.save("crop.jpg", quality='keep')

Объект img сначала является PIL.JpegImagePlugin.JpegImageFile, ностановится просто Изображение после операции изменения размера / вставки.Следовательно, я не могу использовать quality = 'keep', так как это больше не JPEG.Я пробовал обрезать и вставлять, как описано выше, я пробовал несколько других способов, но, похоже, ничто не сохраняет объект JpegImageFile.

1 Ответ

2 голосов
/ 12 марта 2012

Если вы используете этот форк Этьена , который, как я думаю, у вас есть, то вы сможете сделать что-то вроде этого:

img = Image.open("someimage.jpg")
qt = img.quantization
# qt is now a dictionary of arrays which is your quantization table.

width, height = img.size
crop = img.crop((8, 0, width, height))
img = img.resize((width - 8, height))
img.paste(crop, (0,0))

# pass qt in as you save your jpeg
img.save("crop.jpg",  qtables = qt)

См. эту документацию Этьена для получения дополнительной информации.

...