0

ファイルシステムにイメージがあります。トリミング ツールを使用してページに表示しますが、トリミング ツール領域に収まるようにサイズを縮小します (画像が領域より小さい場合は、領域全体を占めるように引き伸ばします)。このページで、ユーザーは保持する写真の領域を選択し (jcrop を使用)、送信します。

バックエンドでは、前のページからの座標を待っています。x1、x2、y1、y2、w、h を取得します。

問題は、サイズ変更された画像 (ユーザーに表示されるもの) の座標が、画像よりも小さい領域を占めるため (画面に収まるようにサイズが縮小された)、フル サイズの画像ではすぐに使用できないことです。または、画像よりも大きくなります (画面に収まるように引き伸ばされました)。

元の写真の高さと幅、および強制された静的な幅と高さを取得できます。

既知の寸法が与えられた場合、画像の正しい領域をどのように見つけますか?

私の現在のコードはここにあります

$target_width = 150;
$target_height = 150;
$jpeg_quality= 90;
$tmp =explode('/',$_POST['filename']); 

$src = '../uploads/'.$tmp[count($tmp)-1];

$x1 = $_POST['x1'];
$x2 = $_POST['x2'];
$y1 = $_POST['y1'];
$y2 = $_POST['y2'];
$w = $_POST['w'];
$h = $_POST['h'];

$image = imagecreatefromjpeg($src);
$final = imagecreatetruecolor($target_width, $target_height);

imagecopyresampled($final, $image, 0, 0, $x1, $y1, $target_width, $target_height, $w, $h);
imagejpeg($final, $src, $jpeg_quality);
4

2 に答える 2

1

たぶん私の質問はあまり明確ではありませんでしたが(私も誰かIRLに説明するのに苦労しました)、私の答えはそれをかなりうまく解決するはずです。

ファイルシステムに画像(パスは$ _POST ['image_path']で利用可能)と「」のような画像タグがあります。jqueryの魔法を使って画像タグからデータを取得しました。

「プロポーション」がその答えです。
h_limitはimgタグの高さの制約ですw_limitはimgタグの幅の制約です

$h_limit = $_POST['h_limit'];
$w_limit = $_POST['w_limit'];

list($width, $height) = getimagesize($_POST['image_path']);
$w_mult = $width/$w_limit;
$h_mult = $height/$h_limit;

そして、私はただすることができました

imagecopyresampled($final, $image, 0, 0, $x1*$w_mult, $y1*$h_mult, $target_width, $target_height, $w*$w_mult, $h*$h_mult);
于 2012-06-15T04:54:54.937 に答える
0

表示サイズが異なる理由はわかりませんが、ブラウザーでの表示サイズを追跡することはできませんでした (これがコードで修正されているかどうかはわかりません。そのため、一部の JavaScript および追加のフォーム フィールドが必要) そして、PHP では、最初にそのサイズにサイズ変更してからトリミングします。

元の画像 ---> ユーザーがブラウザーで見たサイズにサイズ変更 ---> ユーザーが提供した座標に基づいてトリミング

于 2012-06-15T02:13:34.047 に答える