ということで、タイル状に配置する件ですが、タテ長の場合、ヨコ長の場合に、
おおまかに言えば、【必ず入るように配置】の場合と、【部分的に正方形で表示】の場合が考えられます。まぁやりかたとしては大してかわりませんが、
【必ず入るように配置】は、以下ですね。
そして、部分画像と割り切って、正方形としてしまうのが、以下です。
スマフォのアプリなんかはこっちです。
もちろん、部分画像にした方が、切れてしまう部分はあるものの、
解像度としては高くなり有利ではあります。
でも、それは、写真の一覧だからであって、何かしらの選択の場合に、やはり全体をみて欲しいときもあります。その場合は前者になりますね。
どっちにしてもPHPでの実装は非常に簡単で、まず前者の場合。
【画像をLOAD】→【タテとヨコを測る】→【タテヨコ大きい方の数値で正方形の画像を生成】
→【LOADした画像を中央に配置】→【作成した画像をそのまま出力】
で完成。
後者の場合も、
【画像をLOAD】→【タテとヨコを測る】→【タテヨコ小さい方の数値で正方形の画像を生成】
→【LOADした画像を中央に配置】→【作成した画像をそのまま出力】
ということで、正方形にする時の辺の長さをどこをとるかだけの差です。
もちろんその場合に、サムネイル用の場合を考えれば、
あえて、縮小した大きさの正方形で作成するというのも、用途によってはアリですね。
ということで、PHPを。
エラー処理とかしてませんので(-_-;)
// $fn:ファイルパス $localimage = imagecreatefrompng($fn); // PNGの時 // $localimage = imagecreatefromjpeg($fn); // JPEGの時 //------------------ $ww = imagesx ( $localimage ); $hh = imagesy ( $localimage ); //------------------ if($ww > $hh){ $hh2 = $ww; $ww2 = $ww; }else{ $ww2 = $hh; $hh2 = $hh; } //------------------ $image = imagecreatetruecolor($ww2, $hh2); $bgColor = imagecolorallocate($image, 0x0, 0x0, 0x0); imagefill($image, 0, 0, $bgColor); // 背景を塗ってから // imagecolortransparent($image,$bgColor); // 透明にしたいとき $bb = imagecopy($image, $localimage, (int)(($ww2 - $ww)/2), (int)(($hh2 - $hh)/2), // COPY先 0, 0, // COPY元 $ww, $hh); if(is_resource ( $localimage )) imagedestroy($localimage); header('Content-type: image/jpeg'); imagejpeg($img);
0 件のコメント:
コメントを投稿