ということで、タイル状に配置する件ですが、タテ長の場合、ヨコ長の場合に、
おおまかに言えば、【必ず入るように配置】の場合と、【部分的に正方形で表示】の場合が考えられます。まぁやりかたとしては大してかわりませんが、
【必ず入るように配置】は、以下ですね。
そして、部分画像と割り切って、正方形としてしまうのが、以下です。
スマフォのアプリなんかはこっちです。
もちろん、部分画像にした方が、切れてしまう部分はあるものの、
解像度としては高くなり有利ではあります。
でも、それは、写真の一覧だからであって、何かしらの選択の場合に、やはり全体をみて欲しいときもあります。その場合は前者になりますね。
どっちにしても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 件のコメント:
コメントを投稿