圧縮されたJPEG画像を直接操作したいのですが。 PIL/Pillowを使用すると、保存時に画像を圧縮し、圧縮した画像を読み戻すことができます。
from PIL import Image
im1 = Image.open(IMAGE_FILE)
IMAGE_10 = os.path.join('./images/dog10.jpeg')
im1.save(IMAGE_10,"JPEG", quality=10)
im10 = Image.open(IMAGE_10)
しかし、私は無関係な書き込みと読み取りなしでこれを行う方法が欲しいです。 Python画像と品質番号を入力として受け取り、指定された品質のその画像のjpegバージョンを返す関数を含むパッケージはありますか?
インメモリのファイルのようなものについては、StringIO
を使用できます。見てください:
from io import StringIO # "import StringIO" directly in python2
from PIL import Image
im1 = Image.open(IMAGE_FILE)
# here, we create an empty string buffer
buffer = StringIO.StringIO()
im1.save(buffer, "JPEG", quality=10)
# ... do something else ...
# write the buffer to a file to make sure it worked
with open("./photo-quality10.jpg", "w") as handle:
handle.write(buffer.contents())
photo-quality10.jpg
ファイルを確認すると、同じ画像である必要がありますが、JPEG圧縮設定の品質は10%です。
BytesIOの使用
try:
from cStringIO import StringIO as BytesIO
except ImportError:
from io import BytesIO
def generate(self, image, format='jpeg'):
im = self.generate_image(image)
out = BytesIO()
im.save(out, format=format,quality=75)
out.seek(0)
return out
Python3.0にはStringIOがありません。次を参照してください: StringIO in python