PHPとJavascriptで画像編集プログラムを作成していますが、計算ができません。画像編集のための数学
考えられるのは、ユーザーがイメージをアップロードしていることです(これは非常に大きく、10000×10000ピクセル、500×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
を計算し、それらを一緒に追加することです。その後、デフォルトの変数は現在の履歴値に置き換えられます。
私は自分自身を明確にしたいと思います。私の心はそれをもう理解することができません、誰かが私を正しい方向に向けることができますか?
編集:セッションデータを追加するのを忘れました。それは次のようになります。私はあなたがそのようなedisting画像をしたい正しくあなたを理解していれば
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
)
あなたは10^8ピクセルの画像をアップロードできるようになります!あなたは私よりも勇敢な人です。 –
@HighPerformanceMark、サイズ制限がありますが、ここには表示されません。そして、はい、それは大きな画像を扱わなければなりません(まあ、10^8ではなく大きいです)。 –