はい、これは私にも起こります。PIL を使用してサムネイルをトリミングしたり作成したりしたことがないので、これは私にとって学習課題でした...
サムネイル (サイズ、フィルター = なし)
元の画像を所定のサイズ (p. 2) の新しい画像に置き換えます。オプションのフィルター引数は、.resize() メソッドと同じように機能します。この操作により、縦横比 (高さ:幅) が維持されます。結果の画像は、指定されたサイズに収まりながら、可能な限り大きくなります。たとえば、画像 im のサイズが (400,150) の場合、 im.thumbnail((40,40)) 後のサイズは (40,15) になります。
だから何が起こっているのかというと
- アスペクトを維持するサムネイルを使用します
- 画像が 40 x 40 であることを期待しています
- サムネイルの実際のサイズを超えてトリミングしています
- サイズを超えてトリミングされているため、下部に黒い帯が見られる可能性があります
問題を繰り返すために私が書いたコード:
def croptest(file, width, height):
import Image as pil
import os
max_width = width
max_height = height
file, ext = os.path.splitext(file)
img = pil.open(file)
img.thumbnail((max_width, max_height), pil.ANTIALIAS)
img.save(file + ".thumb.jpeg", 'JPEG')
croppedImage = img.crop((10, 10, 40, 40))
croppedImage.save(file + ".croppedthumb.jpeg", 'JPEG')
if __name__ == "__main__":
croptest("Desktop.bmp", 50, 50)
Desktop.thumb.jpeg は 50 x 37 でしたが、Desktop.croppedthumb.jpeg は 30 x 30 だったので、下部に 3 ピクセルの高さの黒い線がありました。
解決策は、サムネイルの実際のサイズ内でトリミングするか、アスペクト比を無視してサムネイルを作成する方法を見つけることです。