ユーザーが写真をアップロードできるようにするアプリケーションを開発しています。写真のアップロード中に、アプリケーションはサーバーで検出を実行して、写真の関心領域 (x、y、幅、高さ) を取得し、それをクライアント (ブラウザー) に返します。 )。
クライアント側では、ユーザーはエッジとして認識された場所をクリックして、関心領域を調整する必要があります。下の画像を参照してください。
私の主な課題は次のとおりです。
(1) サーバーから返された x、y、幅、および高さを指定して、正確な関心領域にズームするにはどうすればよいですか?
これまでのところ、これはこの問題に対する私の解決策です:
var maxWidth = stage.getWidth();
var maxHeight = stage.getHeight();
var imageObj = new Image();
imageObj.src = "image.jpg";
$(imageObj).load(function(){
var ratio = 1;
if(imageObj.width > maxWidth)
ratio = maxWidth / imageObj.width;
else if(imageObj.height > maxHeight)
ratio = maxHeight / imageObj.height;
var w = imageObj.width * ratio;
var h = imageObj.height * ratio;
//region of interest
var roiX = 5;
var roiY = 30;
var roiW = 207;
var roiH = 252;
var face = new Kinetic.Image({
x: -roiX,
y: -roiY,
image: imageObj,
width: w,
height: h,
draggable: true,
scale: {x:1.7, y:1.7}
});
layer.add(face);
stage.add(layer);
});
ご覧のとおり、私の解決策は、サーバーから返された幅と高さをスケーリングの観点から見たものではありません。幅と高さ内でズームする比率を取得するための計算の実行方法が本当にわかりません。
(2)画像のクリックされた各ピクセルのx座標とy座標を取得したい(後で使用するためにサーバーのどこかに保存します)。
(3) x、y 座標値を取得した場合、同じ画像上でピクセルの位置を特定するにはどうすればよいですか (画像にスケールが適用されているかどうかに関係なく)。