2012-05-02 10 views
2

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

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

これは複雑なところです。各クロッピングの間にリサイズが行われるので(ワークエリアに合わせるために)、必要な変数(xywidthheight)を計算するために計算を行うことができないようです。ここまで私がこれまで持っていたことがあります。

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; 

    } 
} 

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

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

編集:セッションデータを追加するのを忘れました。それは次のようになります。私はあなたがそのような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 
) 
+1

あなたは10^8ピクセルの画像をアップロードできるようになります!あなたは私よりも勇敢な人です。 –

+0

@HighPerformanceMark、サイズ制限がありますが、ここには表示されません。そして、はい、それは大きな画像を扱わなければなりません(まあ、10^8ではなく大きいです)。 –

答えて

1

cropre-sizeなどがありますが、あなたのコードから、私は理解していないsomyものがあり、このような

  • として$history
  • foreach($_SESSION['history'] as $key => $history)ないあなたが複数の比率
  • を持っているなぜあなたは歴史
  • $ratio_x = 1; $ratio_y = 1;をループしている理由を確認してください

何私はあなたのJavaScriptを形成すると予想することは

  • X1、Y1
  • X2、Y2
  • 角度
  • 高さ

x2y2のようなものですmで必要ないかもしれない特にユーザーがサイズを変更したい場合は、xyの比率は必要ありません。1つの配給や規模が終わり

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

をPHPをバック持っている時、あなたが見ることができるので、多くのオープンソースのJavaスクリプトのソリューションがありますが、単純計算

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

結論

okです

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

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

+0

ありがとうございました! jCropを使用してパラメータをPHP(x、y、width、height)に渡していますが、元の画像を一度クロップするのに問題があります。ユーザーが複数回画像をトリミングしている場合は、元の画像を1回だけトリミングします。したがって、私はその1つの作物のx、y、幅と高さを計算する必要があります。私はこれの背後にある数学を理解することはできません。 –

+0

あなたはいつでも歓迎です... – Baba

関連する問題