我正在使用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对象。
答案 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。