2

アプリケーションにJcropを使用しようとしていますが、バグが発生しています。デモページに行きましたが、そこにもバグがあります。作成方法は次のとおりです。

このデモページに アクセスしますhttp://deepliquid.com/projects/Jcrop/demos.php?demo=advanced

次のオプションがチェックされていることを確認してください「選択を移動できます」
「サイズ変更可能な選択」「アスペクト比」「minSize/maxSize設定」

選択した領域を作成し、左上隅にドラッグして、選択範囲の右下隅をつかみ(サイズを変更する場合と同じように)、画像の左上隅にドラッグします。

画像の左上隅を通過すると、選択領域が0x0ピクセルの選択に折りたたまれます。

このバグは、アスペクト比が設定されている場合にのみ発生します。それ以外の場合は正常に動作します。

誰かがこのプラグインをハッキングしてこのバグを修正できる可能性がある場所にハッキングした経験があるかどうか疑問に思います。私は一日中それを経験していて、まだそれを理解することができませんでした。

-編集-それでさらに数時間を費やした後、私はバグをほとんど修正することができました。次のコードを変更しました。

        // Magic %-)
        if(xx >= x1) { // right side <-- Changed > to >=
          if(xx - x1 < min_x) {
            xx = x1 + min_x;
          } else if (xx - x1 > max_x) {
            xx = x1 + max_x;
          }
          if(yy > y1) {
            yy = y1 + (xx - x1)/aspect;
          } else {
            yy = y1 - (xx - x1)/aspect;
          }
        } else if (xx <= x1) { // left side <-- Changed < to <=
          if(x1 - xx < min_x) {
            xx = x1 - min_x
          } else if (x1 - xx > max_x) {
            xx = x1 - max_x;
          }
          if(yy > y1) {
            yy = y1 + (x1 - xx)/aspect;
          } else {
            yy = y1 - (x1 - xx)/aspect;
          }
        }

これはそれが崩壊するのを防ぎました、しかしそれはまだ少しバグがあります。

-編集終了-

4

2 に答える 2

3

より安定したバージョンは次のようです。

if(xx===x1){xx=x1+min_x;}

// Magic %-)
if (xx > x1) { // right side
    if (xx - x1 < min_x) {
        xx = x1 + min_x;
    } else if (xx - x1 > max_x) {
        xx = x1 + max_x;
    }
    if (yy > y1) {
        yy = y1 + (xx - x1) / aspect;
    } else {
        yy = y1 - (xx - x1) / aspect;
    }
} else if (xx < x1) { // left side
    if (x1 - xx < min_x) {
        xx = x1 - min_x;
    } else if (x1 - xx > max_x) {
        xx = x1 - max_x;
    }
    if (yy > y1) {
        yy = y1 + (x1 - xx) / aspect;
    } else {
        yy = y1 - (x1 - xx) / aspect;
    }
}
于 2012-01-03T07:23:50.950 に答える
0

これが私のパッチです。これは、投稿された他のパッチよりも優れた動作を生み出すと思います。特に削除されることの 1 つは、デモで minSize を使用してエッジ近くでサイドを切り替えたときに見られるポップ トゥ エッジです。

@@ -578,44 +578,36 @@
         }

         // Magic %-)
-        if (xx > x1) { // right side
+        if (xx >= x1) { // right side
           if (xx - x1 < min_x) {
             xx = x1 + min_x;
           } else if (xx - x1 > max_x) {
             xx = x1 + max_x;
           }
-          if (yy > y1) {
+          if (yy >= y1) {
             yy = y1 + (xx - x1) / aspect;
           } else {
             yy = y1 - (xx - x1) / aspect;
           }
-        } else if (xx < x1) { // left side
+        } else { // left side
           if (x1 - xx < min_x) {
             xx = x1 - min_x;
           } else if (x1 - xx > max_x) {
             xx = x1 - max_x;
           }
-          if (yy > y1) {
+          if (yy >= y1) {
             yy = y1 + (x1 - xx) / aspect;
           } else {
             yy = y1 - (x1 - xx) / aspect;
           }
         }

-        if (xx < 0) {
-          x1 -= xx;
-          xx = 0;
-        } else if (xx > boundx) {
-          x1 -= xx - boundx;
-          xx = boundx;
+        if (xx < 0 || xx > boundx) {
+          xx = x1 + (x1 - xx)
         }

-        if (yy < 0) {
-          y1 -= yy;
-          yy = 0;
-        } else if (yy > boundy) {
-          y1 -= yy - boundy;
-          yy = boundy;
+        if (yy < 0 || yy > boundy) {
+          yy = y1 + (y1 - yy)
         }
于 2014-03-05T18:19:47.880 に答える