3

450x450 px のソース画像があります。そして、PHPを使用して、それぞれ150x150の9ピースにトリミングしたいと考えています。
次のコードを使用しています。
9 枚の画像を取得していますが、トリミングが適切ではありません。スクリーン ショットは次のとおりです。

ここに画像の説明を入力

最後の 1 つは、使用しているソース イメージです。
これが私のコードです。

<?php

$targ_w = $targ_h = 150;
$jpeg_quality = 25;

$src = "puzzleimages/puzzle2.jpg";

$y = 0;
$y2 = 150;
$x = 0;
$x2 = 150;

$i = 3;
$name = 0;
while( $i-- ){
    $j = 3;

    while( $j-- ){


        $img_r = imagecreatefromjpeg($src);
        $dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

        imagecopyresampled($dst_r,$img_r,0,0,$x,$y,$targ_w,$targ_h,$x2,$y2);

        //header('Content-type: image/jpeg');
        imagejpeg($dst_r,'puzzleimages/'.++$name.'.jpg', $jpeg_quality);

        $x += 150;
        $x2 += 150;

    }


    $y += 150;
    $y2 += 150;
    $x = 0;
    $x2 = 150;

}

?>

誰が何が間違っているのか提案できますか?

4

2 に答える 2

2

ソースの幅/高さを変更し続ける必要はないと思います。常に 150 にする必要があります。これを試してください:

imagecopyresampled($dst_r,$img_r,0,0,$x,$y,$targ_w,$targ_h,$targ_w,$targ_h);
于 2014-07-22T14:53:33.653 に答える
1
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int$dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

Php ドキュメントを参照してください。変更が必要なパラメータは と だけsrc_xですsrc_y。とを変更x2y2たため、以下が適用されます。

ソースと宛先の座標と幅と高さが異なる場合、画像フラグメントの適切な伸縮が実行されます。

于 2014-07-22T15:05:25.723 に答える