1

これは長方形を含む元の画像です。切り抜いた画像を作成したい ここに画像の説明を入力

そして、これは私がトリミング後に得たものです ここに画像の説明を入力

したがって、新しい画像の寸法は正しいが、間違った部分がトリミングされていることがわかります。JS は次のとおりです。

$(document).ready(function()
    {
        $('#cropimage').Jcrop(
        {
            aspectRatio: 3 / 4,
            maxSize: [150,200],
            onSelect: updateCoords
        });
    });
    function updateCoords(c)
    {
        $('#x').val(c.x);
        $('#y').val(c.y);
        $('#w').val(c.w);
        $('#h').val(c.h);
    };

そして、ここにPHPコードがあります

function crop($_POST)
{   
    $clipX      = (int)$_POST['x'];
    $clipY      = (int)$_POST['y'];
    $filename   = (string)$_POST['image'];
    $resizedHeight  = (int)$_POST['h'];
    $resizedWidth   = (int)$_POST['w'];

    // Original image's details
    $original   = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'images/user_pictures/' . DIRECTORY_SEPARATOR . $filename;

    $dimensions     = getimagesize($original);
    $old_width  = $dimensions[0];
    $old_height     = $dimensions[1];

    // image = original_image
    $old_image  = call_user_func('imagecreatefrom' . 'jpeg', $original);


    // Crop image
    if (function_exists('imagecreatetruecolor') && ($new_image = imagecreatetruecolor($resizedWidth, $resizedHeight)))
        imagecopyresampled($new_image, $old_image, 0, 0, $clipX, $clipY, $resizedWidth, $resizedHeight, $old_width, $old_height);

    imagejpeg($new_image,'images/user_pictures/'.$this->getUserID().'_picture.jpg');
}

以前にこれらのphp関数を使用したことはありませんが、いくつかのチュートリアルを読みましたが、エラーは表示されません. しかし、少なくとも 1 つある必要があります...何が間違っていますか? while original Image は、何らかの理由でサイズが変更されているようです。

4

1 に答える 1

2

(x,y,w,h) (10,15,30,35) に基づいてトリミングする場合、関数は次のようになります。

imagecopyresampled ( $dst_image , $src_image , 0, 0 , 10 , 15 , 30-10 , 35-15 , 30-10 , 35-15 )

元の画像から 20x20 を新しい画像にコピーしているため、これらの寸法は新しいものであり、dst_w、dst_h、および src_w、src_h です。

$old_width と $old_height は元の画像の完全な幅になりましたが、トリミングされた部分の幅と高さになるはずです。

$old_width = $resizedWidth;
$old_height = $resizedHeight;
于 2013-01-21T14:42:58.580 に答える