裁剪时在PIL中保留图像类型信息

时间:2012-03-12 18:10:01

标签: python image jpeg python-imaging-library

我正在使用Etienne from here对Python的PIL的出色修改。我需要的是修改所做的 - 使用与原始相同的量化表来保存JPEG文件。通过这种修改做到这一点似乎很优雅,我现在通过使用大量的C代码来实现这一目标。

我的问题是我在PIL中获得了一个JPEG文件对象,但在任何修改之后它变成了其他类型的对象。我想要的是拍摄图像,裁剪并使用相同的量化表保存它。

我试试:

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,但在调整大小/粘贴操作后变成了一个Image。因此我不能使用quality ='keep',因为它不再是JPEG。我已经尝试过如上所述的裁剪和粘贴,我尝试了其他一些方法,但似乎没有任何东西可以保留JpegImageFile对象。

1 个答案:

答案 0 :(得分:2)

如果您正在使用我认为您的this fork by Etienne,那么您应该能够做到这样的事情:

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)

有关详细信息,请参阅this documentation by Etienne