ぼやけて見えたり、予期しない塗りつぶしが発生したりするAffinity SVGを診断するには、影響を受けた曲線を1つだけ分離し、ラスタライズ設定を比較してから、その塗りつぶしと塗りつぶしモードを確認します。これらのテストにより、書き出し上の制約、オブジェクトの設定、受け取り側アプリの違いを切り分けられます。

このガイドでは、Macの現行Affinityデスクトップアプリからベクター描画を書き出し、ブラウザーや別のデスクトップアプリで表示を確認する方法を説明します。メニューの場所は現行のAffinityヘルプセンターに基づいています。古いAffinity Designerでは、メニューの場所が異なる場合があります。

まず曲線を1つ選び、条件をそろえて書き出す

Affinityドキュメントの作業用コピーを保存します。問題がはっきり確認できる曲線を1つ選び、期待する結果を書き留めます。たとえば、「内側の塗りつぶしがない青い曲線の線」や「中心が透明な塗りつぶしのリング」です。こうしておくと、関係のない複数のプロパティを変更せずに各テストを判断しやすくなります。

File > Export > Exportを開き、ファイル形式としてSVGを選択して、右側の設定を確認します。追加のコントロールはAdvancedの下に表示されます。オブジェクトを分離するには、Area: Selection Onlyを選択します。Selection Areaでは重なっているレイヤーも含まれます。これらの違いは、AffinityのExportダイアログのヘルプに記載されています。

設定を変更する前に、基準となるファイルを書き出します。Safariと、問題に気づいたアプリの両方で開きます。同じ領域を近い表示サイズで比較してから、拡大します。問題が両方のアプリで現れるのか、書き出し先だけなのか、Affinityの書き出しプレビューですでに現れるのかを記録します。

この比較は診断の手がかりとして使います。2つのビューアで同じ結果になれば、書き出された内容を調べているという確信は高まりますが、それだけで原因が特定できるわけではありません。ビューア間に違いがあれば、調べるべき互換性の問題を絞り込めます。

表示される症状 最初のテスト 結果から切り分けられること
拡大すると曲線がぼやける ラスタライズ設定を比較する ラスタライズされた内容か、保持されたジオメトリか
曲線の線にベタ塗りの内側が加わる 選択したオブジェクトの塗りつぶしを確認する 不要な塗りつぶしか、線の表示上の問題か
穴が消える、または重なった領域が塗りつぶされる 塗りつぶしモードを比較する 形状の内側の定義が異なるか
受け取り側の特定アプリでのみファイルが正しく表示されない 単純化したコピーでテストする 書き出し先での処理か、一般的な書き出しの問題か

SVG内の曲線がぼやけるのはなぜですか?

SVGという拡張子が付いていても、ファイル内のすべてのオブジェクトが拡大縮小できるベクターとして保持されるとは限りません。Affinityは、SVGファイル内のラスタオブジェクトはサイズ変更すると劣化すると明記しています。また、SVGの使用方法に関するドキュメントでは、ウェブ用アートワークを整数ピクセルの位置に配置して鮮明さを保つことも推奨しています。

まず、ぼやけるのが描画全体なのか、装飾を施した特定のオブジェクトなのかを確認します。装飾のない曲線は鮮明なままで、装飾したオブジェクトだけがぼやける場合は、全要素がぼやける描画とは別の調査が必要です。その観察結果をもとに、次に分離するオブジェクトを決めます。

3種類のラスタライズ設定を比較する

AffinityのSVG書き出しには、Rasterizeの選択肢が3つあります。Nothingは書き出し時にラスタライズせず、非対応の要素を除外します。Unsupported propertiesは非対応の要素をラスタライズします。Everythingはすべての要素をラスタライズします。そのため、Nothingでは内容がベクターとしての見た目を保ったまま残るのではなく、削除されることがあります。Export Settingsを参照してください。

Unsupported propertiesとNothingを使い、領域やほかの設定は変えずに個別のファイルを書き出します。影響を受けた曲線、その装飾、欠落した内容を比較します。変更した設定が分かるファイル名を付け、比較の経緯を追えるようにします。

Nothingで対象の内容が消える場合、その結果は、非対応コンテンツに関する記載と一致します。分離したオブジェクトを単純化してテストをやり直す理由になります。ただし、元のオブジェクト全体がベクターとして互換性を持っていたと証明するものではありません。

曲線だけの状態で正しく書き出せる場合は、スタイルを一度に1つずつ戻します。症状が再発した時点で止めます。この順序なら、すべての効果、ブラシ、オブジェクトの配置が同じように書き出されると決めつけずに、再現できる要因の組み合わせを絞り込めます。

見た目の保持とジオメトリの保持を選ぶ

ラスタコンテンツを保持する場合、Raster DPIでラスタライズされた効果の解像度を設定します。Downsample imagesを使うと、ラスタ解像度を下げられます。Allow JPEG compressionとそのQuality設定は、ラスタライズされたコンテンツに影響します。Use tile patternsでは、ラスタライズされた領域がビットマップで塗りつぶされたベクターシェイプに包まれる場合がありますが、一部アプリでは対応が限定されています。これらはExport Settingsに記載されています。

診断用の書き出しでは、ダウンサンプリングとJPEG圧縮を無効にし、同じオブジェクトを再度比較します。ラスタライズされた見た目を保持する場合は、最終的に使用するサイズで評価します。ラスタ解像度を上げても、編集可能な曲線が再構築されるわけではありません。解像度の変更が対処するのは、結果のラスタ部分です。

拡大縮小できるジオメトリを保持する必要がある場合は、問題の見た目をベクターオブジェクトで単純化するか作り直してから、対象だけを分離して再度書き出します。目指すべき結果は、意図したアートワークが含まれ、拡大しても正しく表示される書き出しです。残った曲線が鮮明だからといって、装飾が欠落したファイルがその基準を満たすわけではありません。

開いた曲線に予期しない塗りつぶしが付くのはなぜですか?

曲線には線と塗りつぶしの両方を設定できます。SVGでは、開いたサブパスは端点同士を結ぶ線分があるものとして塗りつぶされます。そのため、表示上の線は開いたままでも、くさび形や広い内側の領域が生じることがあります。また、SVGでは塗りつぶしの初期値は黒で、塗りつぶしは継承されます。これらの動作は、SVG 1.1: Paintingで規定されています。

影響を受けた曲線を選択し、Window > General > Colorを開きます。Fillセレクターを選び、意図したアートワークが内側の塗りつぶしのない線であれば、Noneのスウォッチを選びます。変更したのがStrokeではなくFillであることを確認します。現行のColorパネルのドキュメントには、個別のセレクターとNoneのスウォッチが記載されています。

分離した曲線を書き出し直します。内側の塗りつぶしが消えたら、描画全体を書き出す前に、ほかの影響を受けたオブジェクトも1つずつ確認します。描画全体を線だけにする意図がない限り、すべてのオブジェクトにNoneを適用するのは避けてください。

開いたアーチを例に考えてみましょう。線は一方の端点からもう一方の端点まで伸びていますが、塗りつぶしが設定されていると、アーチと暗黙の直線の閉じ線との間の領域が塗りつぶされることがあります。塗りつぶしを削除すれば、その内側の領域に直接対処できます。曲線を閉じるとジオメトリが変わり、不要な線分が描かれる可能性があります。

単独のSVGがSafariでは正しく表示されても、別のアプリに読み込むと塗りつぶしが生じる場合は、Fillが明示的にNoneに設定された単純な開いた曲線でテストを繰り返します。これにより、書き出し先のアプリを対象とした比較ができます。黒い領域があるというだけで、Affinityが必ず黒い塗りつぶしを書き出したと結論づけないでください。

穴や重なった領域が変わるのはなぜですか?

複雑な曲線の中に塗りつぶされた領域がある場合は、単純な開いた線に不要な塗りつぶしがある場合とは別の問題です。Affinityには、自己交差する曲線のどの領域を内側とみなすかを決めるAlternateとWindingの塗りつぶしモードがあります。オブジェクトを選択した状態で、現行のコマンドはVector > Fill Modeにあります。Fill modesを参照してください。

Alternateは交差回数が奇数か偶数かを使います。Windingはパスの向きを考慮した符号付きの回数を使います。SVGの用語では、それぞれevenoddとnonzeroに対応します。この違いは、自己交差や入れ子になったサブパスで重要です。詳しくは、AffinityのFill modesヘルプとSVGのfill-rule仕様を参照してください。

影響を受けたオブジェクトを複製し、両方のモードを比較します。意図したすべての穴と重なりを確認してから、モードを選びます。向きを調べる必要がある場合、Affinityでは、ペンツールまたはノードツールのコンテキストツールバーにあるSettingsでShow curve orientationを有効にする方法が説明されています。これはWindingの動作に関係する情報を表示します。Fill modesを参照してください。

入れ子になった輪郭を例にすると、Alternateでは、光線が2つの境界を横切るため、内側の領域が塗りつぶされずに残ることがあります。Windingでは、その結果は境界の向きによって変わります。モードを切り替えると、ある穴が元に戻る一方で、別の重なりが変わる場合があるため、1か所だけでなくオブジェクト全体を確認してください。

どちらのモードでも意図した形にならない場合は、曲線の作成方法を見直します。作業用コピーで塗りつぶす領域と開口部を明示的に作り、再度書き出します。塗りつぶしモードはジオメトリを解釈するルールです。任意に選んだ塗りつぶし領域と空白領域の集合を表現するものではありません。

線を展開したり、変形をフラット化したりするのはどんなときですか?

ベクターの線の解釈に再現可能な問題がある場合は、Expand Strokeを使います。Affinityの手順では、Move ToolまたはNode Toolでオブジェクトを選択し、Vector > Expand Strokeを選びます。このコマンドは線の境界を閉じた曲線に変換するもので、SVG書き出し前に線を準備する方法として明記されています。Expand strokeを参照してください。

編集可能な元データは残し、線を展開した複製でテストします。書き出す前に、端点、接合部、太さ、囲まれた空間を比較します。展開するとオブジェクトの構造が変わるため、テストが成功したと判断するには、書き出し先の問題が解消されるだけでなく、意図した見た目も保たれている必要があります。

記載されている制限は2つあります。展開した線は元のツールで編集できなくなります。また、ピクセルベースのブラシで描いた線はラスタベースのため展開できません。したがって展開はベクターの線に対応した方法ですが、ビットマップをベクターに一般変換する機能ではありません。Expand strokeを参照してください。

変形されたオブジェクトに関する不一致では、Flatten transformsを個別にテストします。Affinityによると、この設定は書き出しファイル内の変形されたオブジェクトを固定し、アプリ間での表示精度を高めます。ぼやけや塗りつぶし全般を直す万能策ではなく、特定の目的を持つ互換性テストです。Export Settingsを参照してください。

修正を採用する前に描画全体を確認する

分離したオブジェクトが正しく書き出せたら、意図したドキュメント全体またはアートボードを使って再度書き出します。実際の表示サイズと拡大時の両方で、Safariと受け取り側のアプリを使って確認します。以前ぼやけていた曲線、開いた線、透明な穴、重なり、周囲のアートワークを調べます。

症状を解決した変更を簡潔に記録しておきます。たとえば、意図しない塗りつぶしの削除、適切な塗りつぶしモードの選択、非対応の見た目の単純化、適切な解像度でのラスタ部分の保持、ベクターの線の展開、変形のフラット化です。こうしておけば、うまくいった設定をすべての描画に当てはめることなく、結果を再現できます。

完成したSVGでは、保持したラスタコンテンツがあれば、それを把握したうえで必要なサイズに適していることを確認し、意図したアートワークを保ちます。後から変更するときに元の曲線から作業を始められるよう、検証済みの書き出しファイルと一緒に、編集可能なAffinityのソースも保管します。

参考資料