

初めまして、python 初めて初日のど素人です。

画像を読み込むところで以下の様に記述しており、縦横比を変えずにリサイズしたいのですが、いろいろなサイトのやり方を試しましたがうまく行きません。  
できればパーセントで指定したいのですが。何卒よろしくお願いします。

[code]

    import PIL.Image
    import PIL.ImageTk
    
    def dispPhoto(path):
    　newImage = PIL.Image.open(path).resize((300,300))
    
    # ====続く=== #
    
[/code]


CC BY-SA 4.0
2019-08-17T22:31:28.607
57420
2019-08-19T05:44:46.383
2019-08-19T02:22:36.357
3060
35494
question
python pillow
PillowにおけるResizeの指定方法を教えてください


上手く出来ないのは、1行の処理の中でファイルのOpenと縦横比(アスペクト比)を保ったサイズ変換の両方を行おうとしているためでしょう。

[PIL.Image.open](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.open)

[PIL.Image.size](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.size)
/
[PIL.Image.width](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.width)
/
[PIL.Image.height](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.height)

[PIL.Image.Image.resize](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize)

> Parameters: size – The requested size in pixels, as a 2-tuple: (width,
> height).

resize()で縦横比を保つためには、元々のデータの縦横サイズ(ピクセル数)の情報が必要ですが、それはOpen()と同じ行の中では取得・指定することはできません。  
コメントで紹介した [Python/Pillowで画像サイズを変更する方法](http://pineplanter.moo.jp/non-it-
salaryman/2019/03/27/python-pillow/) のように2行に分ける必要があります。

変更先サイズをパーセントで指定するには、100%を1.0として、元データの縦と横に同じ値で掛け算して、結果を整数に変換すれば良いでしょう。  
上記紹介先では0.8(=80%)に変換しています。

他に、パーセント指定ではありませんが、縦横どちらかをピクセル指定して縦横比を保って変換する方法と、縦横ピクセル数を指定してその範囲で縦横比を保って最大サイズになるように変換する方法があります。  
上記紹介先と同様の処理も含めて、[Pillow (PIL) -
画像をリサイズする方法について](http://pynote.hatenablog.com/entry/pillow-resize) に提示されています。


CC BY-SA 4.0
2019-08-19T05:37:11.430
57443
2019-08-19T05:44:46.383
2019-08-19T05:44:46.383
26370
26370
57420
answer