「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > HTML5 Canvas で高品質な画像のダウンスケーリングを実現するにはどうすればよいですか?

HTML5 Canvas で高品質な画像のダウンスケーリングを実現するにはどうすればよいですか?

2024 年 11 月 4 日に公開
ブラウズ:197

How to Achieve High-Quality Image Downscaling with HTML5 Canvas?

高品質での HTML5 キャンバス画像のサイズ変更 (ダウンスケール)

HTML5 キャンバスを使用してブラウザで画像のサイズを変更すると、特に次の場合に品質が低下する可能性があります。スケールダウン。この記事では、この問題を調査し、ダウンスケーリング中に最適な品質を達成するための解決策を提供します。

補間と画像スムージングの無効化

質問で提供された最初の CSS および JS コードには、次のものが含まれています。補間と画像スムージングを無効にするためのプロパティ:

image-rendering: optimizeQuality;
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-optimize-contrast;
image-rendering: optimize-contrast;
-ms-interpolation-mode: nearest-neighbor;

ただし、これらのプロパティはダウンスケーリングの品質に直接影響しません。補間とスムージングは​​新しいピクセルの作成に関係しますが、画像サイズを縮小する場合には関係ありません。

ダウンサンプリングと補間

ブラウザでの画像のダウンスケールの問題が関係しています。

ダウンサンプリングでは、ブラウザは通常、宛先画像の各ピクセルに対してソース画像から 1 つのピクセルを選択する単純な方法を使用します。これにより、ディテールやノイズが失われる可能性があります。

ピクセルパーフェクト ダウンサンプリング アルゴリズム

この問題を解決するには、すべてのソースを取得するピクセルパーフェクト ダウンサンプリング アルゴリズムが必要です。ピクセルを考慮してください。提供されているコード スニペットは、そのようなアルゴリズムの例です。

function downScaleCanvas(cv, scale) {
    // Process all pixels in the source image
    for (sy = 0; sy < sh; sy  ) {
        for (sx = 0; sx < sw; sx  ) {
            // Calculate target pixel position and weights
            ...

            // Add weighted contributions to target buffer
            ...
        }
    }

    // Create result canvas and populate it
    ...

    return resCV;
}

このアルゴリズムは、1、2、または 4 つの宛先ピクセルに対する各ソース ピクセルの寄与を計算し、ダウンスケーリング中にすべての詳細が確実に保持されるようにします。

複数のダウンスケーリング ステップの重要性

複数の段階でダウンスケーリングすると、画像の不鮮明さが増加する可能性があります。これは、連続したダウンスケーリング操作によって丸め誤差が累積され、ノイズが大きくなるためです。

他のアプローチとの比較

で示されているように、提供されたアルゴリズムは他のダウンサンプリング手法よりも優れています。例の画像。複数のダウンスケーリングステップを行った場合でも、シャープネスの維持とノイズの最小化の間のバランスを実現します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3