アスペクト比を保ったまま同一サイズに投稿画像を縮小・トリミングする

Posted on

sizedmage

オリジナルサイズが( size(x), size(y) )の画像を、アスペクト比を保ちつつ、黄色の枠 (tsize(x), tsize(y))のサイズで切り取りたい。もしオリジナルサイズが大きい場合は、一度黄色枠と同じアスペクト比の大きな箱で切り取った後(tsize(x), tsize(y))にリサイズしたい。

詳細は続きから。

定義

画像のオリジナルサイズをsize(x),size(y)とします。また、切り取り&リサイズ後のサイズをそれぞれtsize(x), tsize(y)とします。

方法

  1. size(x)/tsize(x)、size(y)/tsize(y)の最小値をとり、それをp とする
  2. 切り取る箱を次のように用意する。値は整数になるように切り捨てる。
    1. 支点(x,y) = [ (size(x) – tsize(x) * p)/2, (size(y) – tsize(y) * p)/2 ]
    2. 終点(x,y) = [ (size(x) + tsize(x) * p)/2, (size(y) + tsize(y) * p)/2 ]
  3. 「2」で作った箱で画像を切り取る(cropする)
  4. (tsize(x) , tsize(y))になるように画像をリサイズする

 

プログラム風に。

PIL風に表すとこんなかんじです。

p = min(size(x) / tsize(x) , size(y) / tsize(y))
box = (int( (size(x) - tsize(x))/2) ),
int( (size(y) - tsize(y))/2 ),
int( (size(x) + tsize(x))/2 ),
int( (size(y) + tsize(y))/2,) ) 
image.crop(box)
image.resize( tsize(x), tsize(y) )

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>