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