私はいくつかの複雑な問題を解決する必要があります。今は、html5にオブジェクトキャンバスをサポートするjavascriptにこのような関数を書く必要があります。この関数は画像の一部を切り抜いてプレビューに表示します。私は、イメージの異なる解像度よりも行う必要があります。私はこれにjQueryライブラリ、特にjquery.Jcrop.jsを使用しています。プレビューの画像の可視部分は、あとの目的のために後で使用します。ファイルに切り捨てられた形で書き込み可能でなければなりません。キャンバスの機会。このスクリプトはうまくいきましたが、問題は大きい写真から小さい写真に拡大縮小しようとするときです(それぞれの画像がブラウザウィンドウ内で高さ500ピクセルに固定されるようにしたい)。私は、スクリプトの現在の図の下に提示:HTML5キャンバス - 画像のプレビューと大きさが異なるスケーラブルなセクション
function updatePreview(c)
{
if (parseInt(c.w) > 0)
{
var rx = 200/c.w;
var ry = 300/c.h;
// Show canvas image preview2
var imageObj = $("#target")[0];
var canvas = $("#preview2")[0];
var context = canvas.getContext("2d");
canvas.setAttribute('width', '200');
canvas.setAttribute('height', '300');
//context.scale(2, 2);
context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0,
canvas.width, canvas.height);
$('#preview').css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
};
そして、ここで最初のプレビューは、CSSに基づいて、それが正しく動作している
<table>
<tr>
<td>
<img src="http://imgon.net/di-M7Z9.jpg" id="target"
alt="obrazek" height="450"/>
</td>
<td>
<div style="width:200px;height:300px;overflow:hidden;">
<img src="http://imgon.net/di-M7Z9.jpg" id="preview" alt="Preview" />
</div>
<br />
<div>
<canvas id="preview2" style="width:200px;height:300px;"></canvas>
</div>
</td>
</tr>
</table>
を処理するスクリプトのために簡略化されたhtmlコードですが、 CSSは画像の一部のみをカバーし、実際にはカットしません。コントラスト、キャンバスは高解像度の画像を表示し、プレビューはスケーリングされた画像のセグメントを反映しません(私はセクションのみを拡大しました)。これはFirefoxで発生します。 Internet Explorerは特別なライブラリで、キャンバスの結果はCSSと同じです。私の最後の質問はです。スケーリングされたイメージのプレビューを作成する機能で、元の解像度のプレビューを作成する機能はどう思いますか?私はMath.round(rx * boundx)やcx Math.round(ry * boundy)のような変数c.yの代わりに入れようとしましたが、正しくはありません。 私はここにライブを見ることができるページを提供します:agd-brita.pl/mobile2/tutorial.html 私はあなたに助けを求める。進歩をありがとう。
私は完全にあなたに同意。 ralImageCropは正しい数式です。長い間、私はこれにも来ました。しかし、実際の画像の大きさは何かを知る必要があります。私たちは幅と高さだけがすでに画像を再スケーリングしていることを知っているからです。だから、実際の画像の大きさを常に一定の大きさに戻す機能が必要です。 – kassprek
私のフィドルを試しましたか? –
あなたがDOMに動作しないことができる他、ドキュメントがロードされるまで待たなければなりません!フィドル(左のバーを見て)あなたのためにそれを行いますが、あなたは私が何を見ていない場合、私はあなたを助けることができない$のようなもの(ドキュメント).ready(...) –