ホームページ  >  記事  >  ウェブフロントエンド  >  HTML5 SVG 2D 入門 1—SVG (スケーラブル ベクター グラフィックス) 概要_html5 チュートリアルのヒント

HTML5 SVG 2D 入門 1—SVG (スケーラブル ベクター グラフィックス) 概要_html5 チュートリアルのヒント

WBOY
WBOYオリジナル
2016-05-16 15:50:071543ブラウズ
ビットマップとベクター グラフィックス
以前は、jpeg、gif などのブラウザーに表示されるグラフィックスはすべてビットマップであり、これらの画像形式はラスターに基づいていました。ラスター イメージでは、イメージ ファイルはイメージ内の各ピクセルのカラー値を定義します。ブラウザはこれらの値を読み取り、それに応じて動作する必要があります。この種の画像の再現能力は比較的高いですが、状況によっては不十分に見える場合があります。たとえば、ブラウザがさまざまなサイズで画像を表示すると、エッジがギザギザになることがよくあり、ブラウザは元の画像に存在しないピクセルの値を補間または推測する必要があり、これにより画像の歪みが生じます。さらに、ビットマップのアニメーション化は、せいぜい、個々の画像が高速で連続して表示される「パラパラ漫画」タイプのアニメーションの作成に限定されます。

ベクター グラフィックスは、値自体を指定するのではなく、各ピクセルの値を決定するために必要な命令を指定することで、これらの問題の一部を克服します。たとえば、ベクター グラフィックスは、直径 1 インチの円のピクセル値を提供する代わりに、ブラウザーに直径 1 インチの円を作成し、残りの処理はブラウザー (またはプラグイン) に実行させるように指示します。これにより、ベクトル グラフィックスに関するラスター グラフィックスの制限の多くがなくなり、ブラウザーは円を描画する必要があることのみを認識します。画像を通常の 3 倍のサイズで表示する必要がある場合、ブラウザは通常のラスター画像の補間を実行することなく、単純に正しいサイズで円を描画します。同様に、ブラウザは、アプリケーションやデータベースなどの外部情報ソースに簡単に結び付けることができる命令を受け取り、画像をアニメーション化するために、 radius や color などのプロパティを操作する方法についての命令を受け取るだけです。
HTML システムでは、ベクター グラフィックスを描画するために最も一般的に使用されているテクノロジは、SVG と HTML5 で新しく追加された Canvas 要素です。どちらのテクノロジーも、ベクター画像とラスター画像の描画をサポートしています。

SVG の概要
Scalable Vector Graphics (略して SVG) は、XML を使用して 2 次元グラフィックスを記述する言語です (SVG は XML 構文に厳密に従います)。 SVG では、ベクトル グラフィック形状 (直線と曲線で構成されるパスなど)、画像、テキストの 3 種類のグラフィック オブジェクトを使用できます。 グラフィック オブジェクト (テキストを含む) をグループ化、スタイル設定、変換し、以前にレンダリングしたオブジェクトに結合することができます。 SVG 機能セットには、ネストされた変換、クリッピング パス、アルファ マスク、およびテンプレート オブジェクトが含まれます。

SVG 描画はインタラクティブで動的です。 たとえば、スクリプトを使用してアニメーションを定義し、トリガーできます。これは Flash に比べて非常に強力です。 Flash はバイナリ ファイルであるため、動的に作成したり変更したりするのは困難です。 SVG はテキスト ファイルなので、動的操作は非常に簡単です。さらに、SVG はアニメーションを完成させるために関連する要素を直接提供するため、操作が非常に便利です。

SVG は他の Web 標準と互換性があり、Document Object Model DOM を直接サポートします。これは、HTML5 のキャンバスと比較して非常に強力な点でもあります (ここで、SVG も SVG グラフィックスを表示するために同様のキャンバスを内部的に使用していることに注意してください。後で、多くの機能が HTML5 のキャンバスに似ていることがわかります。 SVG の Canvas であるとは明示されていません。HTML5 の Canvas 要素を指します)。したがって、SVG の高度なアプリケーションの多くは、スクリプトを使用して簡単に実装できます。さらに、SVG グラフィック要素は基本的に DOM 内の標準イベントをサポートします。多数のイベント ハンドラー (「onmouseover」や「onclick」など) を任意の SVG グラフィック オブジェクトに割り当てることができます。 SVG のレンダリング速度は Canvas 要素ほど速くありませんが、DOM 操作が非常に柔軟であるため、速度の欠点を完全に補うことができます。

SVG はプロトコルでもあり言語でもあり、HTML の標準要素でもあり、画像形式でもあります。
SVG は HTML5 に含まれるものではありませんが、人気のある Web テクノロジーの 1 つであると考えられているため、当面はこのトピックに含めます。

SVG と他の画像形式の比較
他の画像形式と比較すると、SVG には多くの利点があります (多くの利点はベクター グラフィックスの利点から得られます)。
• SVGファイルは純粋な XML であり、多くのツール (メモ帳など) で読み取りおよび変更できます。
• SVG は JPEG や GIF 画像よりもサイズが小さく、圧縮率が高くなります。
• SVG はスケーラブルで、画質を損なうことなく拡大でき、どの解像度でも高品質で印刷できます。
• SVG 画像内のテキストはオプションで検索可能です (地図の作成に最適です)。
• SVG は Java テクノロジで実行できます。
• SVG はオープンスタンダードです。

SVG と Flash の比較
SVG の主な競合相手は Flash です。 Flash と比較した場合、SVG の最大の利点は、他の標準 (XSL や DOM など) と互換性があり、操作が簡単であることですが、Flash はオープンソースではない独自のテクノロジーです。保存形式や動的に生成されるグラフィックスなどの他の側面でも、SVG には大きな利点があります。

SVG の表示方法
ここでは、HTML5 と SVG をサポートするブラウザーについては説明しません。基本的には、最新の Chrome または FireFox ブラウザー (IE) をインストールするだけで十分です。 IE9 より前のバージョンについては、SVG プラグインをインストールする必要がありますが、ここでは省略します)。 SVG を直接サポートするブラウザの場合、SVG は主に両側で 2 つの表示方法を使用します。

HTML にインライン化
SVG は標準の HTML 要素であり、HTML に直接書き込むことができます。次の例を参照してください。

コードをコピー
コードは次のとおりです。









🎜>
<-- ;title> 初めての SVG ページ

width="200px" height="200px">
fill= "none" ストローク="黒"/>
style="ストローク: 黒; 塗り: 赤;"/ >

これらの部分は基本的に記述する必要がありません。 HTML5 で記述します (記述するかどうかはあなた次第です)。

スタンドアロン SVG ファイル
スタンドアロン SVG は、svg ファイル拡張子を使用して提供されるベクター グラフィック ファイル形式を指します。この svg ファイルをブラウザに埋め込むと、すぐに使用できるようになります。
1. 独立した SVG ファイル/ページ、定義されたテンプレートは基本的に次のとおりです:

コードをコピーします
は次のとおりです:


<-- SVG マークアップ --> ;/svg>

このようなテキスト ファイルを、sun.svg などの svg 拡張子のファイルとして保存します。このようなファイルは、ブラウザで直接開くことも、他のファイルに参照として埋め込むこともできます。ページ。
2.HTML は外部 SVG ファイルを参照します。
次の小さな例のように、object 要素または img 要素を使用して SVG グラフィックを埋め込みます:


コードをコピーコードは次のとおりです。


<br> </head> <br><body> <br><object data="sun.svg" type="image/svg xml" <br />width="300px" height="300px"> ; <br><!-- ここにフォールバック コードを実装するか、メッセージを表示します: --> <br><p>お使いのブラウザは SVG をサポートしていません。最新のブラウザにアップグレードしてください。</p> 🎜></object> <br><img src="sun.svg" alt="svg はサポートされていません!" <br /></html> <br> <br>実際、SVG は他の XML ドキュメントに配置することも、他の XML ドキュメントと同様に XML 関連テクノロジを使用してフォーマットおよび検証することもできます。これは重要ではないため、ここでは省略します。 <br><br><br>SVG のレンダリング順序</div> <br>SVG は、定義された要素の順序に従って厳密にレンダリングされます。これは、階層化を制御するために z-index 値に依存する HTML とは異なります。 。 SVG では、前に書かれた要素が最初に描画され、後ろに書かれた要素が最後に描画されます。後でレンダリングされる要素は前の要素をカバーしますが、透明度の影響でカバーされていないように見える場合もありますが、SVG は実際には厳密な順序でレンダリングされます。 <br>注: SVG は XML で定義されているため、HTML とは異なり、大文字と小文字が区別されます。 <br><strong></strong>実用的なリファレンス<br>: <br>公式ドキュメント: <br>http://www.w3.org/TR/SVG11/<br><strong>スクリプトインデックス: </strong> http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx<br><a href="http://www.w3.org/TR/SVG11/">開発センター: </a>https://developer.mozilla.org/en/ SVG<br><a href="http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx">人気のリファレンス:</a>http://www.chinasvg.com/<br></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="html5 キャンバス描画チュートリアル (10) - サーフェスを線に分割して角丸長方形をシミュレートする_html5 チュートリアル スキル" href="http://m.php.cn/ja/faq/6438.html">html5 キャンバス描画チュートリアル (10) - サーフェスを線に分割して角丸長方形をシミュレートする_html5 チュートリアル スキル</a></span><span>次の記事:<a class="dBlack" title="html5 キャンバス描画チュートリアル (10) - サーフェスを線に分割して角丸長方形をシミュレートする_html5 チュートリアル スキル" href="http://m.php.cn/ja/faq/6440.html">html5 キャンバス描画チュートリアル (10) - サーフェスを線に分割して角丸長方形をシミュレートする_html5 チュートリアル スキル</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/348281.html" title="AlloyTouch 全画面スクロール プラグインは 30 秒で滑らかな H5 ページを作成します" class="aBlack">AlloyTouch 全画面スクロール プラグインは 30 秒で滑らかな H5 ページを作成します</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348372.html" title="HTML5の実戦とタッチイベント解析(touchstart、touchmove、touchend)" class="aBlack">HTML5の実戦とタッチイベント解析(touchstart、touchmove、touchend)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348373.html" title="HTML5 Canvas 9での画像描画例を詳しく解説" class="aBlack">HTML5 Canvas 9での画像描画例を詳しく解説</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348374.html" title="正規表現と新しい HTML5 要素" class="aBlack">正規表現と新しい HTML5 要素</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348469.html" title="NodeJS と HTML5 を組み合わせて複数のファイルをドラッグ アンド ドロップしてサーバーにアップロードする方法" class="aBlack">NodeJS と HTML5 を組み合わせて複数のファイルをドラッグ アンド ドロップしてサーバーにアップロードする方法</a><div class="clear"></div></li></ul></div></div><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><p>ホームページ</p></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><p>コース</p></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><p>に質問</p></a></li><li><a href="http://m.php.cn/ja/login"><b class="icon5"></b><p>私の</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="http://m.php.cn/ja/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><span>ホームページ</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><span>コース</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/article.html"><b class="icon3"></b><span>記事</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><span>に質問</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/dic.html"><b class="icon6"></b><span>辞書</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course/type/99.html"><b class="icon7"></b><span>マニュアル</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/xiazai/"><b class="icon8"></b><span>ダウンロード</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/faq/zt" title="特集"><b class="icon12"></b><span>特集</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="http://m.php.cn/ja/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="http://m.php.cn/ja/" >ホームページ</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/article.html" class="hover">記事</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/wenda.html" >に質問</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/course.html" >コース</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/faq/zt" >特集</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/xiazai" >ダウンロード</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/game" >ゲーム</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/dic.html" >辞書</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:setlang('en');" class="language course-right-orders chooselan " href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:setlang('ko');" class="language course-right-orders chooselan " href="javascript:;"><span>한국어</span><span>(KO)</span></a><a onclick="javascript:setlang('ms');" class="language course-right-orders chooselan " href="javascript:;"><span>Melayu</span><span>(MS)</span></a><a onclick="javascript:setlang('fr');" class="language course-right-orders chooselan " href="javascript:;"><span>Français</span><span>(FR)</span></a><a onclick="javascript:setlang('de');" class="language course-right-orders chooselan " href="javascript:;"><span>Deutsch</span><span>(DE)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>