2013年3月12日火曜日

スマフォWEBアプリで写真をタイル表示させる件。(2)

ということで、タイル状に配置する件ですが、タテ長の場合、ヨコ長の場合に、
おおまかに言えば、【必ず入るように配置】の場合と、【部分的に正方形で表示】の場合が考えられます。まぁやりかたとしては大してかわりませんが、
【必ず入るように配置】は、以下ですね。



そして、部分画像と割り切って、正方形としてしまうのが、以下です。
スマフォのアプリなんかはこっちです。


もちろん、部分画像にした方が、切れてしまう部分はあるものの、
解像度としては高くなり有利ではあります。
でも、それは、写真の一覧だからであって、何かしらの選択の場合に、やはり全体をみて欲しいときもあります。その場合は前者になりますね。

どっちにしてもPHPでの実装は非常に簡単で、まず前者の場合。
【画像をLOAD】→【タテとヨコを測る】→【タテヨコ大きい方の数値で正方形の画像を生成】
→【LOADした画像を中央に配置】→【作成した画像をそのまま出力】
で完成。
後者の場合も、
【画像をLOAD】→【タテとヨコを測る】→【タテヨコ小さい方の数値で正方形の画像を生成】
→【LOADした画像を中央に配置】→【作成した画像をそのまま出力】

ということで、正方形にする時の辺の長さをどこをとるかだけの差です。
もちろんその場合に、サムネイル用の場合を考えれば、
あえて、縮小した大きさの正方形で作成するというのも、用途によってはアリですね。

ということで、PHPを。
エラー処理とかしてませんので(-_-;)

  1.  // $fn:ファイルパス  
  2.  $localimage = imagecreatefrompng($fn);  // PNGの時  
  3. // $localimage = imagecreatefromjpeg($fn); // JPEGの時  
  4.  //------------------  
  5.  $ww = imagesx ( $localimage );  
  6.  $hh = imagesy ( $localimage );  
  7.  //------------------  
  8.  if($ww > $hh){  
  9.   $hh2 = $ww;  
  10.   $ww2 = $ww;  
  11.  }else{  
  12.   $ww2 = $hh;  
  13.   $hh2 = $hh;  
  14.  }  
  15.  //------------------  
  16.  $image   = imagecreatetruecolor($ww2, $hh2);  
  17.  $bgColor  = imagecolorallocate($image, 0x0, 0x0, 0x0);  
  18.  imagefill($image, 0, 0, $bgColor);   // 背景を塗ってから  
  19. // imagecolortransparent($image,$bgColor);  // 透明にしたいとき  
  20.  $bb = imagecopy($image, $localimage,   
  21.    (int)(($ww2 - $ww)/2), (int)(($hh2 - $hh)/2),   // COPY先  
  22.    0, 0,            // COPY元  
  23.    $ww, $hh);  
  24.  if(is_resource ( $localimage )) imagedestroy($localimage);  
  25.  header('Content-type: image/jpeg');  
  26.  imagejpeg($img);  

0 件のコメント:

コメントを投稿