PHPにて画像のトリミング&縮小処理があったんで、メモ。
仕様は下記の通り
- 16:9の画像(解像度:5168×2907)を高さを維持して4:3にする。つまり横長だった画像比を変えるので、両サイドを取り除く
- 解像度自体を320×240にする。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
list($orgImageWidth, $orgImageHeight) = getimagesize(ファイルパス); //最終画像のサイズ $lastImageHeight = $orgImageHeight; $lastImageWidth = $lastImageHeight * 4/3; // サイズを指定して、背景用画像を生成 $canvas = imagecreatetruecolor(320, 240); //中央点の計算 $centerX = $orgImageWidth/2; $centerY = $orgImageHeight/2; //開始点の算出 $startPointX = $centerX - $lastImageWidth/2; $startPointY = $centerY - $lastImageHeight/2; // コピー元画像の指定 $imageInstance = imagecreatefromjpeg($targetImage); // ファイル名から、画像インスタンスを生成 $hasImageResampled = imagecopyresampled($canvas, // 背景画像 $imageInstance, // コピー元画像 0, // 背景画像の x 座標 0, // 背景画像の y 座標 $startPointX, // コピー元の x 座標 $startPointY, // コピー元の y 座標 320, // 背景画像の幅 240, // 背景画像の高さ $lastImageWidth, // コピー元画像ファイルの幅 $lastImageHeight // コピー元画像ファイルの高さ ); if( $hasImageResampled === false ){ return false; } // 画像を出力する $hasOutputImage = imagejpeg($canvas, // 背景画像 出力するファイルパス , // 出力するファイル名(省略すると画面に表示する) 100 // 画像精度(この例だと100%で作成) ); if( $hasOutputImage === false ){ return false; } // メモリを開放する imagedestroy($canvas); |
imagecopysamledの意味がなかなかわかりませんでした。
トリミング
トリミングに関しては開始点($startPointX)でコントロールします。
中央点を取った後でリサイズ後の画像の横幅の半分を引き算します。(図で書いたほうがわかりやすいかも。)
縮小
最終的なファイルの縮小サイズに関してはimagecopysampledの背景画像の幅、高さの引数だけではだめで、$canvasの値を修正しないといけません。
以外にいろいろなところで使いそうですね・・
参考リンク