Tags : svg

このTagsの登録数:213件 表示 : 1 - 10 / 213

2008-06-16

SVG で波紋

ポスト @ 3:19:04 | opera, svg

SVG のフィルタとアニメーション (と JavaScript) で、波紋っぽい効果を出してみました。クリックした場所から波が伝わるような効果がでます (色々と手抜きですが)。

Opera 位でしか動きません (Opera 9.5 で動作確認)。あと、もの凄く重たいので注意。手元では時おり Opera がクラッシュしました。

2008-01-15

Firefox trunk で feImage と feDisplaceMap が実装

ポスト @ 22:21:28 | inkscape, mozilla, svg

Firefox の trunk では feImage 要素 feDisplaceMap 要素 が実装されました。これで SVG 1.1 のすべての原始フィルタがサポートされました。これに伴って幾つかの SVG 1.1 特色機能文字列 (http://www.w3.org/TR/SVG11/feature#Filter 等) もサポートされるようになりました (まだフィルタ関連で未実装な部分もいくつかありますが)。

また、SVG エディタの Inkscape も開発中のバージョンではフィルタのサポートが進んでいます (現在の安定版 0.45 ではぼかしのみサポートされています)。

フィルタ効果の開発者のブログでは feDisplaceMap 要素も使ったフィルタを使った例も紹介されています。

とはいえ、Mozilla の SVG フィルタは遅いので、Firefox 3 では SVG 製作者が意図した時だけ有効にしようという話もでています。

2007-09-04

幅に合わせて文字間隔を調整する

ポスト @ 1:53:32 | svg

cho45 さんの見出しとかを必ず一行におさめたい を読んで、それ SVG で出来るよと。もともと SVG 1.0/1.1 のテキストは自動的に折り返すことはありませんが、指定された幅に合わせて空白やグリフを制御する属性があります。

例として以下のような SVG の断片を考えてみます。

<text x="(X 座標)" y="(Y 座標)">(文字列)</text>

SVG の text 要素の y 属性は (デフォルトでは) 文字列のベースラインの Y 座標を指定します。

指定された幅に合わせるには textLength 属性に幅を指定します。

<text x="(X 座標)" y="(Y 座標)" textLength="(文字列の長さ)">(文字列)</text>

textLength 属性が指定されると文字列が指定された長さになるよう、各文字の間隔が調整されます。

また、lengthAdjust 属性に spacingAndGlyphs を指定すると、間隔とグリフが調整されるようになります。

以上を踏まえて簡単な例を以下に示します。

<?xml version="1.0"?>
<svg width="100%" height="100%" viewBox="0 0 320 240"
 xmlns="http://www.w3.org/2000/svg">
<g font-size="16px">
<path d="M10,85v5h300v-5" stroke="black" fill="none"/>
<text x="10px" y="50px" textLength="300px">これは幅 300px のテキストです。</text>
<text x="10px" y="75px" textLength="300px">これもまた幅が300ピクセルあるテキストなのです。</text>
<path d="M10,105v-5h200v5" stroke="black" fill="none"/>
<text x="10px" y="125px" textLength="200px" lengthAdjust="spacing">これは幅 200px のテキストです。</text>
<text x="10px" y="150px" textLength="200px" lengthAdjust="spacingAndGlyphs">これは幅 200px のテキストです。</text>
<text x="10px" y="175px" textLength="200px" lengthAdjust="spacing">テキスト</text>
<text x="10px" y="200px" textLength="200px" lengthAdjust="spacingAndGlyphs">テキスト</text>
</g>
</svg>

textLength を使った SVG の例

Firefox は textLength 属性には未対応です。Opera 9 や Apache Batik は textLength 属性に対応しています。Apache Batik 1.7beta1 のレンダリング結果は以下の通り。

上記 SVG ファイルのレンダリング結果

2007-06-29

Bug-org 311029 - Implement all SVG 1.1 filters

ポスト @ 21:32:07 | mozilla, svg

Bug-org 311029Jesse Ruderman さん によって整理され、Mozilla SVG のフィルタ実装のメタバグになりました。

Bugzilla では SVG 関係のバグが整理されているとは限らないのでこういうのは非常に助かります。

ちなみに来る Firefox 3 では SVG 1.1 フィルタの多くが利用できるようになる予定です。

2007-06-27

Bug-org 305859 - Em and ex units not implemented for SVGLength (tspan often rendered incorrect

ポスト @ 0:32:57 | mozilla, svg

Bug-org 305859 - Em and ex units not implemented for SVGLength (tspan often rendered incorrectly) のパッチをチェックインして頂き修正完了。

Mozilla SVG はこれまで em や ex 単位には対応しておらず、無視されていました (値としては 0 になる)。今回の修正で em や ex 単位で指定しても値がきちんと計算されます。

W3C の SVG 1.1 テストスイート で ex がリファレンス画像 (PNG) と違う場合があるかもしれません。これはリファレンス画像 (PNG) は 1ex を .5em と仮定しているのに対して、Mozilla はフォントから計算しているという差から生じます。

レビューをしてくださった Robert Longson さんと T Rowley さんには深く感謝します (Smile)

2007-06-13

ドロップシャドウくらいできるさ、Mozilla だって

ポスト @ 12:01:09 , 修正 @ 2007-06-15 9:01:54 | mozilla, svg

ドロップシャドウくらいできるさ、Mozilla だって

Firefox Trunk では SVG フィルタが実装されているのでドロップシャドウは簡単に実現できます。

ドロップシャドウの例 (SVG)

現在の Trunk (Windows だけ?)ではクラッシュしたりハングするようですが (Bug 378575 – Browser hangs mixing filters and text)。

ちなみに Mozilla の SVG フィルタはソフトウェアベースです (ボカシについては nsSVGFEGaussianBlurElement::GaussianBlur あたり)。

WebKit の SVG フィルタ (CoreGraphics バックエンド) は CoreImage を叩いているようです (ガウスぼかし)。

6/15 みなさまのコメントなどを基に全面的に書き直し。

2007-05-21

Mozilla SVG Update : Gran Paradiso Alpha 4 と SVG

ポスト @ 0:47:01 | mozilla, mozilla_svg_update, svg

Mozilla SVG Update より Gran Paradiso Alpha 4 and SVG の翻訳です。

Gran Paradiso Alpha 4 と SVG

Gecko 1.9a4 がリリースされました。このリリースの大きな変更点には cairo 1.3.12 から 1.4.2 への更新と、 SVG テキストコードが cairo を直接利用したものから Mozilla の Thebes グラフィックスレイヤを使ったものへの変更が含まれます。前者はパフォーマンスの大きな向上をもたらし、後者はフォントのより良い選択と特定のフォントに含まれないグリフに対して適切なフォント置換を行います。

1.9a3 から修正されたおもな SVG のバグ:

  • グラデーションとフィルタの stop-color で透明度をサポート。
  • リンクの target 属性を反映
  • テキストコンテナのメモリリークを修正
  • userSpaceOnUse のパターンを参照したストロークの水平線が描かれない
  • SVG テキストを Thebes の API を使ったものに切替。
  • patternContentUnits="objectBoundingBox" が正しく移動されない。
  • パターンを参照している要素の透明度が反映されない。
  • 参照されたパスが変更されても <textPath> が更新されない。
  • コードの再構築
  • セキュリティ修正

あなたのコンテンツをテストして、バグを発見した場合にはテストケースを添えてバグを提出してください

2007-04-15

Mozilla SVG Update : SMIL アニメーションと SVG フォント

ポスト @ 12:10:58 | mozilla, mozilla_svg_update, svg

Mozilla SVG Update より SMIL animation and SVG fonts の翻訳です。

SMIL アニメーションと SVG フォント

以前私は SVG フォントとアニメーションが Firefox 3 にむけた私たちの開発スケジュールにないという事実について議論を書きました。ここに、これらの機能を実装するのに必要だろうものに関するいくつかの考えがあります。

2 つの中で SVG フォント はより簡単です。 bug 375141に SVG テキストを 「おもちゃ」 API 経由で cairo を直接使うものから、 mozilla のその他の部分でフォントを処理しているのとおなじコード (代替フォント機能を与えてくれます) に切替える、現在レビュー中のパッチがあります。 cairo グラフィックスプロジェクトは ユーザフォント API の作業をしてきており、cairo 1.6 の ロードマップ にそれを載せています。 始めるために、人は (どんな文脈でも SVG フォントを使うことができる CSS の @font-face よりも) 描画される SVG ファイルに埋め込まれている SVG フォントの場合に集中したがっているかもしれないと思います。 さらに言えば、グリフが "d" 属性のパスデータである <glyph> の基本形から始めるのが最も簡単でしょう。 パスデータの分析は、Mozilla では既に実装されており、 nsSVGPathDataParserToInternal クラスを通して再利用できます。SVG フォントを解決するうえで最も困難な問題は、おそらく、 SVG (塗りと様々な SVG DOM API) に必要な場合だけ cairo がユーザフォントを知っていることを確実にして、他のドキュメントに「漏らさ」ないことでしょう。

SMIL アニメーション はより大きなプロジェクトですが、Brian Birtles が学校のプロジェクトとして引き受けたため、最初からやらなくても良いでしょう。プロジェクトに関する彼の記事は現在のパッチに対しては少し時代遅れですが、選択されたアーキテクチャについて役に立つ情報を提供します。最新のパッチは bug 216462 に添付されているので見つけることができるでしょう。そのバグのコメント13 で次に必要なステップに関する Brian の考えを見つけることができます。これは deCOMtamination のような様々なパッチのクルーンアップに主に関係します。これの後にスタイルシステムによって管理されているプロパティ (例: 色やストロークの幅)をアニメーションさせる方法を理解することと、他の SMIL 要素 (<set>, <animateMotion>, <animateColor>, 及び <mpath>) を実装することなどがきます。

最後の注意として、もし Firefox 3 に向けてこれらの機能に取り組みたいなら、機能凍結は現在 2007 年 7 月に予定されています。質問があるか、Mozilla SVG コードを理解するポインタが欲しいなら、mozilla.dev.tech.svg ニューズグループに投稿するか、 irc.mozilla.svg #svg IRC チャンネルで私たちをみつけることができるか調べてください。

Mozilla SVG Update : Gran Paradiso Alpha 3 と SVG

ポスト @ 11:39:07 | mozilla, mozilla_svg_update, svg

Mozilla SVG Update より Gran Paradiso Alpha 3 and SVG の翻訳です。

Gecko 1.9a3 がリリースされました。これは Alpha 2 で発生していたSVG の大きなリグレッションを修正しており、テストの良い候補です。問題を見つけた場合、テストケースと一緒にバグを登録してください。

このアルファ版では cairo が更新されなかったため、Mac OS X のテキストは依然多くの問題を抱えています。Mac OS X のもうひとつの問題は cairo の Quartz バックエンンドが繰り返しなしのサーフェースのペイントをサポートしていないため、フィルタがタイル状のゴミが入ることです。

1.9 Alpha 2 から修正された主な SVG バグ:

  • octaves 属性が 10 以上のfeTurbulence 要素がハングする
  • 直前に foreignObject 要素によって占領されていた領域が再描画されない。
  • W3C SVG WG の意見に賛成して、フィルタの部分領域領域を変更。
  • feColorMatrix 要素の実装。
  • <a> 要素の中のテキストが描画されない。
  • テキストの更新を単純化
  • 座標のコンテクストコードを書き直し
  • サーフェースに直接関係ある要素 (フィルタ、マスク) が ビッグエンディアンマシン (例えば PowerPC) で動かない。
  • 外がわの SVG へ viewBox 属性を追加しても働かない。
  • いくつかの SVG 要素にプレゼンテーション属性がない。
  • マーカ用の手書きのオブザーバスキームを nsIMutationObserver に置き換え。
  • セキュリティの修正。

2007-04-06

Google Maps のマイマップが SVG を使っている

ポスト @ 0:37:56 | svg

Google Maps のマイマップ (Google Japan Blog の記事) ですが、Firefox 2 では地図の編集に SVG を使っています。ただし Trunk ではラスタ画像でした。Google Maps では既に多角線を描く API が見付かっていました。