2322px x 4128pxの画像があるとします。幅と高さの両方が1028px未満になるようにスケーリングするにはどうすればよいですか?
Image.resize
( https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.resize )を使用することはできませんそれには、新しい幅と高さの両方を指定する必要があります。私がやろうとしているのは、以下の擬似コードです:
if (image.width or image.height) > 1028:
if image.width > image.height:
tn_image = image.scale(make width of image 1028)
# since the height is less than the width and I am scaling the image
# and making the width less than 1028px, the height will surely be
# less than 1028px
else: #image's height is greater than it's width
tn_image = image.scale(make height of image 1028)
Image.thumbnail
を使用する必要があると思いますが、この例によると( http://pillow.readthedocs.org/en/latest/reference/Image.html#create-thumbnails )この答え( PILを使用して画像のサイズを変更し、そのアスペクト比を維持するにはどうすればよいですか? )、サムネイルを作成するために幅と高さの両方が提供されます。新しい幅または新しい高さ(両方ではない)を取り、画像全体を拡大縮小する関数はありますか?
車輪を再発明する必要はありません。これに利用できる Image.thumbnail
メソッドがあります。
maxsize = (1028, 1028)
image.thumbnail(maxsize, PIL.Image.ANTIALIAS)
アスペクト比を維持しながら、結果のサイズが指定された境界より大きくならないようにします。
PIL.Image.ANTIALIAS
を指定すると、サイズ変更の結果を改善するために高品質のダウンサンプリングフィルターが適用されます。
Image.resizeを使用しますが、幅と高さの両方を計算します。
if image.width > 1028 or image.height > 1028:
if image.height > image.width:
factor = 1028 / image.height
else:
factor = 1028 / image.width
tn_image = image.resize((int(image.width * factor), int(image.height * factor)))