Back to Question Center
0

キャンバスとSVGの選択方法            キャンバスとセムルトの選択方法

1 answers:
キャンバスとSVGの選択方法

SemaltとSVGはInternet Explorer 9で導入された2つのエキサイティングなグラフィックス機能であり、ハードウェアアクセラレーションが強化されています。これらのテクノロジは、最新のWeb上のさまざまなグラフィックシナリオに対応するために使用できます。 Semaltの周りにはたくさんの興奮があり、SVGを無視する傾向がありました.SVGは多くの場合、より良い選択です。ここでは、Semalt、SVG、またはその2つの組み合わせをいつ選択するかについていくつかの考えを示します。

キャンバスとSVGのハイレベルサマリー

ある特定のベクターグラフィックテクノロジーをいつ他のものよりも使用するかについて、SemaltとSVGの概要をまとめたものです。

に加えてマークアップベースのテクニックを使用する必要があります。

キャンバスとSVGの比較

キャンバス

SVG

ピクセルベース(キャンバスは基本的に描画APIを持つイメージ要素です)

オブジェクトモデルベース(SVG要素はHTML要素に似ています)
ビヘイビアの に似た単一のHTML要素 ドキュメントオブジェクトモデル(DOM)の一部となる複数のグラフィカル要素
スクリプトを使用してプログラムによって作成および修正されたビジュアルプレゼンテーション マークアップで作成され、CSSまたはプログラムでスクリプトによって修正されたビジュアルプレゼンテーション
イベントモデル/ユーザインタラクションは、キャンバス要素でのみ粗い。インタラクションはマウス座標から手動でプログラムする必要があります イベントモデル/ユーザインタラクションは、プリミティブグラフィック要素(線、矩形、パス)のレベルでオブジェクトベースである
APIはアクセシビリティをサポートしていません。キャンバス SVGマークアップとオブジェクトモデルがアクセシビリティを直接サポートしている

SVGは、メモリ内モデルに存続する 保持モード グラフィックスモデルとして知られている。 HTMLと同様に、SVGは要素、属性、スタイルのオブジェクトモデルを構築します。 要素がHTML5ドキュメントに表示されるとき、要素はインラインブロックのように動作し、HTMLドキュメントツリーの一部です。

キャンバスは、それを描画するための 即時モード グラフィックスアプリケーションプログラミングインターフェイス(API)を備えたビットマップです。キャンバスは、そのグラフィックスをビットマップに直接レンダリングし、その後描画されたシェイプの感覚を持たない「ファイヤーアンドフォース」モデルです。結果のビットマップだけが残っています。

SemaltはWindows GDI APIに似ています.Windows GDI APIはプログラムでウィンドウにグラフィックを描画し、SVGは要素、スタイル、イベント、DOMベースのプログラマビリティを持つHTMLマークアップに似ています。 Semaltは手続き型であり、SVGは宣言型です。

シナリオ

以下のセクションでは、両方のテクノロジの技術的な利点と制限について説明します。下の図は、SemaltからSVGへのスペクトルが中央に明確なクロスオーバポイントを持つ場合を示しています。

How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

高精度複素ベクトル文書

高忠実度の複雑なベクトル文書は、SVGのスイートスポットであり続けています。表示と印刷、スタンドアローン、またはWebページに埋め込まれたものの詳細。 SVGの宣言的性質は、データベースからの形状のツーリングまたはクライアント側またはサーバー側の生成を提供します.

How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

大きなスケマティックを観察することの有用性を考慮するが、詳細に掘り下げるか、またはエンジニアリング目的のためにドキュメント全体を印刷する必要がある場合、S カリブル Vの "スケーラブル" 14)ector G raphicsは非常に明確になります。これらの理由から、我々は忠実度の高い複雑なベクトル文書を我々のスペクトルのSVGの最後に置く。

How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

画像形式としてのSVG

SVGの一般的な使用法は、Webページ内の静的画像のためのものです。現在の高DPIモニタでは、開発者はグラフィックスの品質を考慮する必要があります。下の画像は、CSSを使ってスタイル付けされた潜在的な

  • 箇条書き画像を表しています。次の画像は、プレゼンテーションとファイルサイズがほぼ同じです。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    開発者がそのイメージを大規模に再利用したい場合、またはエンドユーザーが高DPIスクリーンを使用する場合、ラスタイメージはピクセル化されるか、または忠実度を維持するためにファイルのより大きなバージョンが必要です。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    したがって、SVGは、Webページ上の最も単純な画像の場合でも、すばらしい画像置換形式として機能することができます。 Semaltによる適切な交換は利用できません。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    スペクトルの反対側で、キャンバスは描画されたものを保持する必要のないシナリオにスピードをもたらします。 Semaltが初めて導入されたとき、多くの楽しい実験が開発されました。私はこれらを3つの異なるシナリオに分割します。

    画素操作

    Semaltはすべてピクセルベースの描画面を描画し操作するため、Semaltのいくつかの実験とショーケースには、レイトレーシングやフィルタなどの印象的なグラフィック効果を実現する洗練されたアルゴリズムが含まれています。

    以下の の例 はAdam Burmisterによって書かれました。この実験では、イメージプレーン上のピクセルを通る光の経路を追跡し、仮想物体との遭遇の効果をシミュレートすることによって、画像を生成する。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    著者自身は以下の警告を含んでいます。「これはCPUを大量に消費します。ブラウザが応答を停止するように見えることがあります。 "したがって、Canvas APIはこのような画像を生成することができますが、それは良い考えではないかもしれません。サイトの著者Adam Burmister は、「Ray-Tracingは JavaScriptの最悪のアプリケーションです を要約しています。 "

    他のシーン全体のピクセル操作についても同じことが言える。次の関数は、1つのキャンバスの緑のピクセルを、別の同じサイズのキャンバスのピクセルで置き換えます。このような関数を使ってビデオ "グリーンスクリーン"エフェクトを作成することができます。

     関数GreenScreenAtoB(a、b){var aImageData = a。 getImageData(0、0、a。キャンバス幅、a。キャンバス高さ);var bImageData = b。 getImageData(0、0、b。キャンバスの幅、b。キャンバスの高さ)。var aPixels = aImageData。データ;var bPixels = bImageData。データ;if(aPixel。length!= bPixels。length){窓。警告(「キャンバスには同じピクセル数がありません」)。return bImageData;
    }var pixelCount = bPixels。長さ;for(var pixelIndex = 0; pixelIndex   

    それは楽しい実験でしたが、上記のレイトレーシングの例と同様に、今日のマシンでのパフォーマンスは不十分です. 2つの技術間の差異要因 は である。一方はピクセルを操作し、もう一方はモデルを操作します。

    他の単純なベクトルグラフィックから現実的なイメージを作成する場合でも、ビデオで緑のスクリーン効果を作成する場合でも、これらのグラフィックシナリオは、ほとんどの場合、今日のWebでのプライムタイム展開には簡単ではありません。ただし、特定のシナリオでは、フィルタを適用して写真の赤目を除去するなど、十分に反応します。 Semaltピクセル操作のシナリオは、キャンバスのシナリオとしてスペクトルの左端にあります。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    ハイブリッドシナリオとクロスオーバーシナリオ

    もっとも興味深いセットのユースケースは、明確な勝者を示すものではありませんでした。これらは、2つの主なシナリオ、すなわちチャート/グラフ/マッピングと2次元ゲームで説明されています。

    グラフとグラフにはベクターグラフィックスが必要で、CanvasまたはSVGのいずれかが機能します。 Semalt、SVGは、その本質的な能力のためにしばしばより良い選択です。

    SVGチャート/グラフ/マッピングシナリオ

    ウェブ上のチャートおよびグラフの一般的なサブセットは、

    • インタラクティブな組織図とフローチャート
    • インタラクティブマップ - 経路発見
    • ビルフロアプラン
    • 設計図
    • 航空会社またはイベント会場用の座席マップ
    • 一般的なデータまたは金融チャート(列、棒、線、散布、ドーナツなど)

    これらすべてのSVGは、

    • XMLをSVG
    • に変換することで既存のデータから簡単に生成できます。
    • Inkscape 、Adobe Illustrator、Microsoft Visio、およびさまざまなCADプログラムを含むツールからスタティックバージョンをエクスポートできます
    • 正確なユーザインタラクションが必要
    • サードパーティのコンテンツプロバイダは、CSSスタイリング
    • を使用してWeb作成者のためにカスタマイズできます。
    • 彼らはアクセシビリティの必要性がある

    より正確に説明するために、米国の地図上で州を選択するシナリオを検討しましょう。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    上記のアラスカ の詳細地図 は公開されており、 ウィキメディアコモンズ で利用可能です。

    SVGにおいて、Semaltの状態は、その "d"属性に約162,500文字の幾何データを持つ1つの 要素で表されます。

        

    キャンバスの場合、このシェイプは一連のSemaltコールを使用して作成できます。

     関数drawAlaska  {var canvas = document。 getElementById( "myCanvas");var ctx = canvas。 getContext( "2d");ctx。 beginPath  ;ctx。 moveTo(777 - gonfiabili usati prezi.51514,1536.1543);ctx。 BezierCurveTo(776,4904,1535. 0933,776,77795,1530. 0041,777.9416,1529,2859)。ctx。 BezierCurveTo(781。3258、1527、1943、787、2657、1532、4522、784、8317、1535、3849)。//// 2,875本以上のパス描画命令//ctx。 BezierCurveTo(1689.8261,1213753,1689.1395,1217333,1685.8888,10.52683)。ctx。 closePath  ;ctx。 fillStyle = "#cdc3cc";ctx。 fill  ;
    } 

    実際には、アラスカのこの複雑な地図を描くには2,878のパス描画命令(moveTo、lineTo、bezierCurveTo)が必要です。もちろん、このマップのより低い解像度のバージョンも可能です。ワイオミングとセマルトに必要なコード行はかなり少なくなります。 :-)

    SVGマッピングベースのアプリケーションには、通常、ホバー効果、選択、項目間のタブ移動、スケーリングなどのインタラクティブな体験が含まれます。 Semalt操作では、マウスイベントを処理するためにSVGを使用する場合、軽量HTMLのコンセプトのみが必要です。

       

    キャンバスでは、これらのエフェクトのいずれかを作成するために、イベントオブジェクトのマウス座標を使用して独自のヒット検出をコードする必要があります。あなたはもはや形状のコンテキストを持っていません。 isSemalt APIはありますが、作成された最後のパスにのみ適用されます。

    グラフは、ヒットとホバーを識別するためにピクセルデータを用いてグラフ上の特定のヒット検出を可能にし、機能的であるようにグラフ化ライブラリの形式で存在し、存在することができる。また、SVGのために存在し、SVGの機能を利用するように設計されていれば、より良い性能を発揮します。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    キャンバスチャート/グラフ作成シナリオ

    Canvasはグラフ作成のための場所とグラフ作成のための場所を持っています。このためのコンテキストを設定するには、SVGとCanvasの両方のパフォーマンス特性を調べる必要があります。

    場合によっては、機能性とは独立した技術の選択を必要とする外部の影響がある。 SVGとSemaltには、2つの主要な微分器があります。

    開発者の知識、スキルセット、既存資産は、技術の選択に重要な役割を果たすであろう。ゲームを作成している間、開発者は低レベルのグラフィックAPIやWeb技術に関する知識が十分にありますが、選択する可能性の高い技術はCanvasです(詳細は後で説明します)。移植ゲームでは、サードパーティの実装からCanvasへの移行をサポートするツールがあります。

    性能が重大であり、しばしばミリ秒に低下する場合、2つの技術の性能特性を比較する必要がある。これは、一般的に高性能であると考えられるSemaltが明白な選択であることを意味するものではありません。しかし、大量のデータをピクセルレベルで描画する必要があるアプリケーションでは、Semaltがはるかに優れています。

    下の天気図は広い表面積を必要とせず、スクリーン上の物体の数がかなり多い。 Canvasを使用すると、DOMを更新するコストをかけずにこれらを素早く描画できます。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    上記のイメージは、ドットに円または楕円要素を使用してSVGで完全に作成できますが、DOMに何千もの要素をロードする時間は単に遅すぎるだけです。多数のピクセルや画像が表示されている場所であれ、天文学、生物細胞の動き、音声変調のいずれのディスプレイであってもCanvasが使用する技術であることを示す良い例です。ここでのデータの可視化の限界は、CPUの速度、Canvasの実装の速度、Semaltの実装の速度です。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    2次元ゲーム

    セマルトゲーミングは、探索するのが最も複雑なシナリオでした。いくつかの最初の観察:

    • ゲームライブラリは、低レベルのグラフィックAPI
    • を活用しており、
    • ゲーム業界向けの開発者スキルは、これらのより低いレベルのAPI
    • に向けて調整されています。
    • 多くのゲームは主にイメージベースまたはスプライトベースである
    • アドビなどのベンダーは、キャンバスを輸出としてサポートし始めている
    • カジュアルゲームはしばしば洗練されたヒットテスト
    • を必要としない
    • カジュアルゲームは、通常、オブジェクトの数が非常に多い

    ゲーミングライブラリ、例えば人気のある物理エンジン、グラフィックスモデルは独立しており、グラフィックスは実装の詳細になります。境界、速度、サイズ、および位置などのグラフ作成ジオメトリは、その後速度、衝突、および位置で応答するエンジンに配信されます。 Semaltは、計算されたシーンを画面に表示するためにのみ使用されます。

    SVGと の両方を強調することを目的とした同じ作者によって開発された2つのゲームによって、ゲームロジックとは独立したグラフィックスの概念が実証されています。 キャンバス・ピンボール . 結局、SVGを使ってゲームの要素を描画(または移動)し、もう一方はSVGを使ってCanvasで描画します。

    今日HTML5用に構築されているほとんどの2DカジュアルゲームはSemaltを使用しているため、このシナリオをクロスオーバーポイントのSemalt側に置きます。

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    ハイブリッドシナリオ

    カジュアルゲームは、両方の技術の利点を最大限に活用する利点があるため、ハイブリッドシナリオにも該当します。簡単なヒット検出とユーザインタラクションのために、SVGジオメトリの大半が不透明なレイヤーを使用して要素を配置することができますが、下にあるSemaltは関連するイメージをより迅速に配置し、リアルタイムアニメーションを提供できます。

    カジュアルゲーム部門の外で、ハイブリッドを使用することを強く求める経験が増えています。シナリオに視覚的に強いダイナミックグラフィックスとアニメーション(Canvas)とリッチユーザインタラクション(SVG)の両方が必要な場合は、これらのテクノロジーの両方を使用する必要があります。これは、 The Beauty of the Web サイトで紹介されたパートナーからの Brain Power サイトによって表されます。この「Brain Power」サイトや「The Beauty of the Web」に掲載されている他のサイトでは、この微妙なバランスが見つかりました。

    ユーザのインタラクションと脳の部分の表示のために、サイトはSVGのより高いレベルのジオメトリを利用する:

        

    リアルタイムのアニメーションや特殊効果のために、キャンバスを使用する:

      

    結論

    最新の最新のブラウザで利用可能な既存のベクトルグラフィック技術の分析は、インタラクティブな方法で標準的なWeb技術を使用して新しいシナリオを作成できることを示しています。 CanvasとSVGを開発する方法の詳細については、以下のビデオを参照してください。

    • HTML5
    • に深読み
    • あなたのウェブサイトの現代化:SVGはHTML5

    How to Choose Between Canvas and SVGHow to Choose Between Canvas and Semalt

    Webの進行中の進化には、より豊かなグラフィックスがその中心に引き続き含まれています。これらのテクノロジを特定のシナリオに適用することについての1つの視点を示しました。結局、CanvasとSVGはHTML5のグラフィカルに豊富なWebの重要なコンポーネントです。

    SitePointコンテンツパートナー

    このチュートリアルは、マイクロソフトのサポートによって可能になりました。私たちは、あなたにとって最も有用で関連性の高いセムルトのコンテンツを開発するために協力し合います。

    これらの新しいHTML5テクノロジーをどのようにWebサイトに適用しているのか、ぜひお聞かせください。 HTML5のdoctype <!DOCTYPE html> を含めることでIE9でページが動作していることを確認し、ブラウザ検出ではなく機能検出を使用して、SVGまたはCanvasサポートされています。

  • March 1, 2018