2

PHPとJavascriptで画像編集プログラムを作成していますが、計算ができません。

アイデアは、ユーザーが画像をアップロードし(非常に大きく、10000 x 10 000ピクセル、小さい場合は500 x 500ピクセル)、PHPを使用して作業領域に合わせてサイズ変更します(小さいまたは大きいサイズに変更します)。ワークエリアは、ユーザーの画面サイズから計算されます(Javascriptを使用)。元の画像が保存され、親指が生成されます。この時点で、ユーザーは画像を回転およびトリミングできます。トリミングと回転は、リソースを節約するために親指の画像を使用して行われます(PHPを使用)。データはセッションに保存されます(回転角、トリミング-x、y、幅、高さ、サイズ変更-幅と高さの比率(original_image_width / thumb_image_width)などのデータ)。ユーザーが[完了]ボタンをクリックすると、これらの手順はすべて元の画像に適用されます。回転している場合は、回転関数を複数回呼び出さないように合計角度が計算されます。トリミングの場合x、、、およびywidthheightトリミングが1回だけ行われるように計算する必要があります。

今、これはそれが複雑になるところです。サイズ変更は各トリミングの間に行われるため(作業領域に合わせるため) 、必要な変数( x、、、、 )を計算するための計算ができないようです。これが私がこれまでに持っているものです。ywidthheight

list($width_original, $height_original) = getimagesize($_SESSION['original_file']);

// default variables
$angle = 0; $x = 1; $y = 1; $width = $width_original; $height = $height_original; $xx = 0; $yy = 0;
$ratio_x = 1; $ratio_y = 1;

foreach($_SESSION['history'] as $key => $history)
{
    if($history['action'] == 'resize')
    {
        $ratio_x = $history['ratio_x'];
        $ratio_y = $history['ratio_y'];
    }

    if($history['action'] == 'crop')
    {
        $xx += ($width * $history['x']) / ($history['width'] * $ratio_x);
        $yy += ($height * $history['y']) / ($history['height'] * $ratio_y);

        $x = $history['x'];
        $y = $history['y'];
        $width = $history['width'] * $ratio_x;
        $height = $history['height'] * $ratio_y;

    }
}

アイデアは、最後の親指(サイズ変更された、ワークエリアに合う小さいまたは大きい画像)から計算xし、それらを合計することです。yその後、デフォルトの変数が現在の履歴値に置き換えられます。

私は自分自身を明確にしたいと思います。私の心はもうそれを理解することができません、誰かが私を正しい方向に向けることができますか?

編集:セッションデータを追加するのを忘れました。次のようになります。

Array
(
[history] => Array
    (
        [0] => Array
            (
                [action] => crop
                [x] => 173
                [width] => 629
                [y] => 124
                [height] => 208
                [file] => 4fa0f6ffe5844.jpg
            )

        [1] => Array
            (
                [action] => resize
                [ratio_x] => 0.69659863945578
                [ratio_y] => 1.1851851851852
            )

        [2] => Array
            (
                [action] => crop
                [x] => 200
                [width] => 1236
                [y] => 254
                [height] => 66
                [file] => 4fa0f70256940.jpeg
            )

        [3] => Array
            (
                [action] => resize
                [ratio_x] => 0.69659863945578
                [ratio_y] => 7.3846153846154
            )

    )

[id] => e03859m172blidbjl1sj8kfm94
[original_file] => 4fa0f6ffe5844.jpg
[current_file] => 4fa0f705e19d6_final.jpeg
[landscape] => 1
[workarea_height] => 613
[workarea_width] => 1470
)
4

1 に答える 1

1

私があなたを正しく理解しているなら、あなたはそのような持っているものなどを編集したいcropのですre-sizeが、あなたのコードから私が理解していないようなものがあります

  • $history
  • foreach($_SESSION['history'] as $key => $history)なぜあなたが歴史をループしているのかわからない
  • $ratio_x = 1; $ratio_y = 1;複数の比率がある理由

私があなたのJavaScriptから期待したものは次のようなものです

  • x1、y1
  • x2、y2
  • 角度
  • 身長

x2そして、y2特にユーザーが単にサイズを変更したい場合は、ほとんどの場合必要ないかもしれません..あなたは必要ではなくxy比率...単一の比率またはスケールは大丈夫です

簡単な計算

$ratio = $thumb_width/$width_original;
$newImageWidth = ceil($width * $ratio);
$newImageHeight = ceil($height * $ratio);

結論

PHPバックエンドを備えたオープンソースのJavaスクリプトソリューションはたくさんあります。

http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop/

http://odyniec.net/projects/imgareaselect/

http://deepliquid.com/content/Jcrop_Download.html

于 2012-05-02T09:21:28.260 に答える