

以下のようなコードで、正方形の画像を出力したいのですが、うまくいきません。

[code]

    $image = imagecreatefromjpeg($user["img"]);
                    $width  = imagesx( $image );
                    $height = imagesy( $image );
                    if ( $width >= $height ) {
                        //横長の画像の時
                        $side = $height;
                        $x = floor( ( $width - $height ) / 2 );
                        $y = 0;
                        $width = $side;
                    } else {
                        //縦長の画像の時
                        $side = $width;
                        $y = floor( ( $height - $width ) / 2 );
                        $x = 0;
                        $height = $side;
                    }
                    $thumbnail_width  = 100;
                    $thumbnail_height = 100;
                    $thumbnail = imagecreatetruecolor( $thumbnail_width, $thumbnail_height );
    
[/code]

var_dumpで中身を見ると、resource(12) of type (gd)と表示されます。

正方形に画像を出力するには、どうすればいいでしょうか。

詳しい方、ご教示ください。


CC BY-SA 3.0
2016-08-26T04:06:04.363
28502
2016-08-26T05:50:50.397
8619
question
php
PHPのGDで、画像をクロップして出力する


画像Aの一部分を画像Bにコピーするには、`imagecopy` 系の関数を、その中でもサムネイル生成のように拡大縮小を伴う場合は
`imageresized` もしくは
[`imageresampled`](http://php.net/manual/ja/function.imagecopyresampled.php)
を使います。

またGDの画像リソースは `var_dump`
では確認できませんから、[`imagepng`](http://php.net/manual/ja/function.imagepng.php) や
`imagejpeg` などを使って一般的な形式としてファイルや標準出力（ブラウザ）に書き出します。

まとめると、こんな感じでしょうか。

[code]

    $image = imagecreatefromjpeg($image_path);
    $image_w = imagesx($image);
    $image_h = imagesy($image);
    
    $src_wh = min($image_w, $image_h);
    $src_x = floor(($image_w - $src_wh) / 2);
    $src_y = floor(($image_h - $src_wh) / 2);
    
    $dest_wh = 120;
    $dest = imagecreatetruecolor($dest_wh, $dest_wh);
    
    imagecopyresampled(
        $dest, $image,
        0, 0, $src_x, $src_y,
        $dest_wh, $dest_wh, $src_wh, $src_wh);
    
    // ブラウザに出力する
    header('Content-type: image/png');
    imagepng($dest);
    
[/code]


CC BY-SA 3.0
2016-08-26T05:50:50.397
28505
2016-08-26T05:50:50.397
8000
28502
answer