[解決済み] 画像をキャンバスにフィットするように拡大縮小する
2023-01-06 05:31:54
質問
ユーザーが画像をアップロードするためのフォームがあります。
画像が読み込まれたら、サーバーに渡す前にファイルサイズを小さくするために、画像に対して何らかのスケーリングを行っています。
これを行うには、画像をキャンバス上に配置し、そこで操作します。
このコードでは、サイズ320 x 240pxのキャンバスで、拡大縮小された画像をレンダリングします。
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
... ここで、canvas.width と canvas.height は、画像の高さと幅に、元画像のサイズに基づくスケーリング係数を掛けたものです。
しかし、このコードを使おうとすると
ctx.drawImage(img, 0, 0, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height
... キャンバスに画像の一部(この場合、左上隅)しか表示されません。実際の画像サイズが 320x240 のキャンバス サイズより大きいにもかかわらず、キャンバスに収まるように画像全体を「拡大縮小」する必要があります。
したがって、上記のコードでは、幅と高さが 1142x856 であり、これが最終的な画像サイズとなります。フォームが送信されたときにサーバーに渡すためにこのサイズを維持する必要がありますが、ユーザーにはキャンバスに表示されるように小さく表示したいだけです。
私はここで何を見逃しているのでしょうか?どなたか正しい方向を示していただけませんか?
ありがとうございました。
どのように解決するのですか?
最初の矩形として、ソース画像(img)のサイズを指定します。
ctx.drawImage(img, 0, 0, img.width, img.height, // source rectangle
0, 0, canvas.width, canvas.height); // destination rectangle
2番目の矩形は、出力サイズ(ソース矩形がどのように拡大縮小されるか)になります。
2016/6アップデート
: 縦横比と位置決め(CSS の "cover" メソッドに準ずる)については、こちらをご覧ください。
シミュレーションの背景サイズ: キャンバスでカバー
関連
-
[解決済み] HTML5 canvas をウィンドウに合わせてリサイズする
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] 画像の横のテキストを縦に揃える?
-
[解決済み] アップロード前に画像をプレビューする
-
[解決済み] div' コンテナに合わせて画像を自動リサイズするにはどうしたらいいですか?
-
[解決済み] 再描画のためにキャンバスをクリアする方法
-
[解決済み] HTML5/Canvas/JavaScriptを使用してブラウザ内のスクリーンショットを撮影する
-
[解決済み] HTML Canvas を gif/jpg/png/pdf としてキャプチャしますか?
-
[解決済み] HTML5 CanvasとSVGとdivの比較
-
[解決済み] HTML5 Canvas Resize (Downscale) Image High Quality?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] ECMAScriptとは?
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?