

Pythonで、フォルダ内の画像を一括リサイズしたいと考えております。  
ググると、指定したサイズのリサイズは出てくるのですが、

IFで規定の範囲内だったら、リサイズしない。  
規定の範囲外(未満もしくは以上)の場合、  
規定に合わせて縦か横もしくは縦横両方をリサイズ。

という判定をしたいのですが、

私はバカなので、IFが複雑になり頭が混乱してきたので、ご教授頂けると幸いです。

規定は、  
両辺が3000px-4000pxの間に収まっていて欲しい形です。(アスペクト比を維持で)  
それらに収まらない場合は、大きい方を上限に合わせたいです。

何卒宜しくお願いいたします。


CC BY-SA 4.0
2022-02-10T17:35:22.757
86259
2022-02-14T16:51:07.883
48781
question
python3 画像
Python でフォルダの画像をリサイズ。


おそらくなるべく一つの`if`文にまとめて記述しようとするから複雑になって混乱するのでしょう。  
元々単純な条件には出来ないのですから、複数の手順に分ければ良いのです。

ソースコードをそのまま提示するのはちょっと安直なので、考え方の例を示します。

ちなみにフォルダ内のファイルを検索してそれらを1個1個処理するとか、画像ファイルから縦横サイズを取得する・縦横サイズを変更するといった処理は既に検索していて出来るようになっていると仮定して省略します。

* * *

画像の縦と横のサイズをそれぞれ分解して別々に以下のようなグループに分類し、その後に併せて判断すれば良いでしょう。

  0. 下限値(3000)未満
  1. 下限値(3000)以上・上限値(4000)未満
  2. 上限値(4000)丁度
  3. 上限値(4000)超え

* * *

そして縦方向を10の位の数値、横方向を1の位の数値として合計すると、以下のようなグループ分けになります。

[code]

    00 01 02 03
    
    10 11 12 13
    
    20 21 22 23
    
    30 31 32 33
    
[/code]

上記の内、11,12,21,22のグループに属するものが縦横ともに上限値と下限値の間にあるのでサイズを変更しない対象です。  
またアスペクト比を保ち、かつ大きい方は上限値とすることが条件なので、縦横どちらかの値が上限値丁度である02,20のグループもサイズ変更しない対象になります。

* * *

それ以外のグループでは縦と横のどちらの値が大きいかで処理が分かれます。

  * A. 横の方が縦より大きい
  * B. 横と縦が同じ
  * C. 縦の方が横より大きい

それぞれの以下の処理を行ってサイズ変更するための新しい値を導きます。

  * A. 縦サイズに(上限値を浮動小数点値にして横サイズで割った商)を乗じて、結果を四捨五入して整数に変換する。  
横サイズは上限値(4000)に設定

  * B. 横と縦を両方とも上限値(4000)に設定
  * C. 横サイズに(上限値を浮動小数点値にして縦サイズで割った商)を乗じて、結果を四捨五入して整数に変換する。  
縦サイズは上限値(4000)に設定

それらの計算で出てきた縦横の値にサイズ変更すれば良いでしょう。

* * *

上記を個々のファイルに対するサイズ変更処理としてプログラミングすれば希望する処理は出来るはずです。


CC BY-SA 4.0
2022-02-14T16:40:46.593
86340
2022-02-14T16:51:07.883
2022-02-14T16:51:07.883
26370
26370
86259
answer