4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

un-T factory! XAAdvent Calendar 2019

Day 14

イラストをSVG化する前に確認する事

Last updated at Posted at 2019-12-14

はじめに

SVGを使っていますか?わたしは最近本格的に使いはじめました。
SVG化したデータのほうがpngの8-bit色制限より軽かった、という事があってから良い子だなと興味が出ました。

SVG化するにあたって

AdobeIllustratorなどのソフトで作られたベクターデータを書き出すと思います。
何も考えずにイラストを作りSVGに書き出ししたので困る事がありました。
どういう点に気をつけておくべきだったかを備忘録として書きます。

書き出し後に困った事

  • パーツごとのグループがわからない、クラスづけに困る
  • パスの複雑化でサイズが増える
  • そもそもアピアランスでつけた効果とかSVGにしてくれるの?

と、なりました。

どうすればいいか

パーツごとのグループがわからない、クラスづけに困る

q2.jpg

書き出してからグループ化したいパーツごとに<g id="パーツごとのID"></g>で囲っていく作業は大変そうです。
パーツごとにレイヤー分けをきっちりし、クラス名も決めておくと書き出した時にレイヤー名を反映してくれます。

パスの複雑化でサイズが増える

q1.jpg
SVGとして書き出した時に、アピアランスの分割拡張後と近い状態になります。
アピアランスを多用している場合、拡張後はパスが増えます。
できるだけ軽量化をしておくべきなので、パスを減らすためにパスファインダーでオブジェクトの結合、アンカーポイントの削除や単純化をして、必要であればイラストの構造も変えたほうがいいかもしれません。

そもそもアピアランスでつけた効果とかSVGにしてくれるの?

q5.jpg

アピアランス複製、変形移動などはしっかり再現してくれました。
イラストレーターでのイラスト作成方法としては頻繁に使う作業なので一安心。

しかし、アピアランスの効果ドロップシャドウと光彩はfilterで再現されず、パスの座標ではないとても長い文字列。。

<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhABxnTISJUryyt5b26vZq9gfXpetyExKYg5IRM5hkL8f 〜省略〜 ggg=="/>

filterに変換するには?

q6.jpg
効果をスタイライズからの適用ではなく、SVGフィルターに変更して、SVG書き出しをする際は別名で保存することでfilterに変わりました。

SVGフィルターは初期設定では足りないので、新しいスタイルを追加したりしてみましたが時間がかかりそうです。
SVGフィルターの中身を触るとなると時間がかかるので、なるべく複数のSVGフィルターが必要なイラストの構造にはしないほうがよさそうな気がします。

SVGフィルター「シャドウ」の中身
<filter  filterUnits="objectBoundingBox" height="130%" id="AI_シャドウ_2" width="140%" x="-15%" y="-15%">
	<feGaussianBlur  in="SourceAlpha" result="blur" stdDeviation="6"></feGaussianBlur>
	<feOffset  dx="8" dy="8" in="blur" result="offsetBlurredAlpha"></feOffset>
	<feMerge>
		<feMergeNode  in="offsetBlurredAlpha"></feMergeNode>
		<feMergeNode  in="SourceGraphic"></feMergeNode>
	</feMerge>
</filter>

クリッピングマスクならどうなるか

q3.jpg

clipPathに書き換えてくれました。特別な事をしなくても大丈夫そうです。

<style>
      .st1 {
        clip-path: url(#SVGID_2);
      }
</style>
<g>
    <defs>
        <path
        id="SVGID_1"
        d=""
        />
    </defs>
    <clipPath id="SVGID_2">
        <use xlink:href="#SVGID_1" style="overflow:visible;" />
    </clipPath>
    <g class="st1">
        <radialGradient>
          <!-- 省略 -->
        </radialGradient>
    </g>
</g>

まとめ

  • イラストごとにレイヤー整理し、SVG化する前にグルーピングしておく
  • アピアランスは描画できるが、光彩やシャドウ類は注意する
  • イラストをSVGにするとパスが増えがちなのでサイズ削減に注意してSVG化する
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?