■ その他のTipsなど。
ストロークのはみ出しを消す
AというストロークにBのストロークがはみ出した場合、Aを同じ場所にコピペ([Ctrl+C][Ctrl+Alt+V]) -> 選択解除せずに[Shift]+B選択 -> パスをカット([Ctrl+/]) -> はみ出たパスが分離するので[Tab]選択して[Delete]
※この操作はAを複製[Ctrl+D]やクローン[Alt+D]では行えない
複数のストロークを選択してコピーすることはベジェツールでも出来ますが、選択したストロークを削除するには、選択ツールに切り替えるかベジェツールで削除したいノードを全て選択してからでないとDelete出来ません。
また状況によっては、はみ出た部分が分離せずにそのまま消えてくれたり、逆にはみ出た部分が残って残したい部分が消えてしまう事が有ります。
交点にノードを追加(ノードツールでダブルクリックまたは[Ctrl+Ait]+クリック)し、消したい側のノードを削除した方が確実かも。交点にノードを追加したら、そのノードを選択して[Shift+B]でノードを分割(パスは連結されている) -> 選択ツールに切り替えて(パスが選択状態のまま)パス分割[Shift+Ctrl+K]で交点を境にストロークが分割できます。
はみ出たストロークが彩色部分をまたいで繋がっているときは、2つの交点にそれぞれノードを追加し、ノードを2つとも選択した状態でコントロールバーから[2つのノードのパスを削除]でアイコンのイメージ通り消えます。
いずれの方法も、ストロークの切断面はセグメントに対して鉛直、またはノードを中心とする円のどちらかなので、交差する角度とストローク幅によっては切断面の角がはみ出てしまう事があります。
グループ化したオブジェクトの中から、グループ解除せずにオブジェクトを選択する
選択ツールで[Ctrl]+クリックで個別に選択できます。
[Shift+Ctrl]+クリックで複数選択・[Alt+Ctrl]+クリックでZ順選択切り替え。
ただし、グループ化したオブジェクトの中からいくつかオブジェクトを削除して残りが1つだけになったとしても、そのオブジェクトはグループ化されたままになっています。
連結したオブジェクトは分割しない限り選択ツールでは個別に選択できません。
コピーしてるのにクリップボードが空!?
ファイル間でオブジェクトのコピー/ペーストを行うには、どちらか一方を、ファイルを開くダイアログから開かなければコピーできません。
詳細はこちらに。
同じ場所にペーストできない!?
たとえば新規書類にpngをインポートして座標をx,yともに0にして、そのpngをパスに変換したsvgを同じ場所にペーストしようとしたとき、Inkscapeの設定[その他]で「<image>要素でインポート」がoffになっていると、ラスターイメージはパターンとしてインポートされます(矩形要素として取り込まれる)。
pngをインポートしたあと、位置を調整するためにドラッグしたり、コントロールバーやXMLエディタの数値を直接編集しても、パターンになっているとその選択範囲内でパターンの並びが変わるため、背景が透明のpngなどの場合で移動量が少ないと気付かない事があります。
つまりペーストする側でなく、ペーストされる側の位置がずれているので、正しい位置に合わせるには「<image>要素でインポート」をonにして(設定は即反映されます)ラスターイメージをインポートし直すか、
インポートしたpngを選択 -> XMLエディタでx,yを0に。次にXMLエディタで<defs>のインデントからパターンを探して、右ペインからpatternTransform属性を削除。
これでパスを同じ場所にペーストし直せば、位置は揃うはずです。
同じ場所の基準は用紙の左上角(xml上の原点0)であるため、コントロールバー上の座標が同じでも、用紙サイズが異なると同じ場所にはペーストできません。
また小数点の誤差やPCに負荷が掛かり過ぎている等の要因により、同じ場所にペーストしても微妙にずれてしまう事があるようです(特にノード数が大量にあるオブジェクトはズレやすい)。
閉じていないノードを閉じる(直線で結ぶ)
ノードツールで始点と終点を囲む(始点終点以外のノードは選択しない)
または始点を選択後、Shiftキーを押しながら終点を囲む(ノードが青に変わる)
-> コントロールバー [join selected nodes with a new segments]をクリック
2つのストロークの始点または終点を結ぶには、双方を連結してから同操作で行えます。
ストロークをもう1つのストロークの任意の場所に繋げたいときは、双方を選択 -> パス連結[Ctrl+K] -> 交点にしたい位置にノードを追加[Alt+Ctrl]+クリック -> ノードを分割[Shift+B] -> 繋げたい側のノードを[Shift]+クリック -> 同じくコントロールバー [join selected nodes..で繋がります(このとき2点間をドラッグすると3つのノードが選択されてしまうためjointできません)。繋がった線が変に曲がり過ぎているときは[Shift+L]で直線にリセットしてから直した方が早いかも。
Document PropertiesでSnapの設定を[Snap node to object]と[Snap to object nodes]にしておけばノードにノードをスナップさせることも出来ます(この設定はドキュメントごとに保存される)
※[Shift+J](2つのノードを連結)は2点間の中心でノードそのものがマージされる。
[Shift+C]選択ノードをコーナーポイントに
[Shift+S]選択ノードをスムースポイントに
[Shift+Y]選択ノードを点対称軸にして左右のハンドルを左右対称変形
※[Ctrl]クリックでトグるが重い事があるので上記の方が無難。
タブレットではノードのハンドル操作が特に重くなりますが、マウス(タブレット付属でない)に持ち替えると、すんなり操作できたりします。複数のノードを選択する以外の操作ならキーボードで操作した方がハンドルを微調整できる上、マウスよりも更に動作が軽くなります。またスナップ設定が有効の状態では、スナップが効きすぎてマウスではノードを操作できない場合が有ります。
ノードをノードにスナップさせるには
※Inkscape 0.46dev+devel, built Jun 24 2007以降、スナッピング設定が大きく変更されました。下記はバージョン0.44〜0.45のスナップ設定ダイアログを元に記述してあります。
スナッピングについて
詳しくはこちら
少し厄介なのは、"辺と辺"をスナップできるのは水平・垂直線のみで、斜めの線上にノードをスナップさせることは出来ても、斜めに交差するパスの交点(セグメントの交点)には、そこにノードがなければ正確な位置に合わせられないということです。
ノードとノードをスナップさせるには
[Snap node to object] -> on
[Snap to object paths] -> off
[Snap to object nodes] -> onパス(セグメント)上にノードをスナップさせるには
[Snap node to object] -> on
[Snap to object paths] -> on
[Snap to object nodes] -> offで、それぞれガイドやグリッドが非表示でもスナップします(閾値はデフォルトの10前後でも強力にスナップが効きます)。
ノードをノードにスナップさせるときは選択ツールでなく基本的にはノードツールを使います。(選択ツールでスナップできる物も有ります)。
[Snap to object paths]が有効のときは方向点もパス(セグメント)にスナップします。そのハンドルが伸びている自分のパスにもスナップするので、閾値を大きくし過ぎるとマウスで操作できなくなります。
パスとパスの交点にノードをスナップさせるには
@双方のパスをコピーしてストローク幅を0に設定(Display modeをOutlineに) ->
Aパスのカットで交点にノードを生成する ->
Bノードにスナップさせてコピーしたパスを削除
くらいしか方法を見つけられませんでした。CADでないのでそれほど厳密な正確さは必要ないのかもしれませんが、例えばパースのアタリに何か四角い物をスナップさせたいときなんかは結構面倒です。
|
ちなみに交差する線(ストローク幅>0)をパスに変換して統合すれば交点の周囲4カ所にノードが出来るので、対角のノードを直線パスで繋いで[Insert]でも交点が出ますが、いずれの方法でも「どっちもどっち」くらいの誤差がでてしまいます(交点を最大Zoom=256倍しないと分からないくらいのズレ)。 |
選択ツールを使用して水平または垂直線(辺)同士をスナップするには
[Snap node to object] -> on
[Snap to object paths] -> on
[Snap to object nodes] -> off(onどちらでも良い)
でスナップできます。
ただし例えば十字のコーナーに■(の角)をスナップしたいとき、どちらか片方の線にはすぐにスナップ出来ても、コーナーにスナップする寸前にもう一方の線の方へ持っていかれてしまい上手くいかないことがあるので、片方の線にスナップさせたらその線を[Shift+矢印キー]で一旦よけて置いて、[Ctrl]+ドラッグで移動方向を限定しつつもう一方へドラッグでパチっとはまります。
2点間の斜めの直線(ストローク)の角度を変えずに伸ばすには
ノードツールで掴んだノードを[Ctrl+Alt]+ドラッグで何処までも伸びますです。
最初コレが分からなくて物凄く悩みました...orz
(スナップが効き過ぎていると引っ付いて伸ばせません)
ノードツールでなく選択ツールでboxの対角を[Ctrl]+ドラッグでも伸ばせますが、色々と面倒な事になるのでノードツールを使用した方が良いです。
詳しくはこちら
線画と塗潰した部分のわずかな隙間を修正
オブジェクトを選択 -> パスメニュー -> ダイナミックオフセット -> ノードツールで円形の制御点をドラッグ
オブジェクトをフィルのみ(ストローク無し)で塗っていると、線画との間にわずかな隙間が出来てしまう事があります。そんな時はオブジェクトのストロークを有効にして、ストロークスタイルで線幅を0.1ptくらいに設定し、Fill色と同色にしてやると取りあえず隙間は埋まりますが、ダイナミックオフセットで簡単に微調整することもできます(角が丸まってしまいますが線画や影線が前面にあれば隠れます)。
オブジェクトを選択したらダイナミックオフセット[Ctrl+J]を押し、ノードツール[F2]に切り替えてみると、ノードが円形の制御点1つだけになっています。
これをドラッグすると、オブジェクトの重心位置を保ったまま一回り大きく(または小さく)できます。
このとき線画や上層にあるオブジェクトの不透明度を50%くらいにしておくと確認しやすいです。
通常のノードなら[右Crlt+>]や[左Alt+]]などでハンドルの長さや角度を細かく調整できますが、ダイナミックオフセットは残念ながらマウスドラッグでしか調整できません。
※ノードツールを選択した状態でダイナミックオフセットを使うと、選択中のオブジェクトがあらぬ方向へ飛んでいってしまうことがあるようです。
ダイナミックオフセットしたオブジェクトをパスに戻すには、オブジェクトをパスに変換すればパス編集できるようになりますが、完全に元の状態には戻りません(ノードが増える)。
グループ化したパターンを元の状態に分割するには
グループ化させて作ったパターンを分割するには、一旦Pattern to Objectしてから -> グループ解除 -> パターンの下層に1枚ゴミが発生するので削除(Fill/Strokeがなしになっているオブジェクトがあり、ステータスバーのコメントで判断できます)。なお同一ファイルで何度もパターンを変更するとソースにゴミが溜まるので、XMLエディタで使用しなくなったパターンIDは削除すると良いです。
6<svg:svg id="svg1234">
6<svg:defs id="defs5678">
6<svg:pattern id="pattern6789">
6<svg:pattern id="pattern6888">
のようになっているので、最後に作ったパターンしか使っていないなのにいくつもパターンIDがあるときは、↑の例では"pattern6888"より上にあるpattern idはゴミです(使用していないパターンは[ファイル] -> [バキューム]でも削除できます)。
なおパターンを使用したSVGは、psやpdfで保存しても反映されず、Firefoxでも表示できないようです。
※パターンはパターンを使用したファイルにのみ保存されています。
パターンとクローンタイルの違い
パターンは、htmlのBackgroundイメージのように同じ形の物をタイル状に敷き詰めるだけですが、クローンタイルは1つおきに反転しながら並べたり、少しずつずらしてならべたり、少しずつ大きさを変えながら並べたり、他にも色々高度な並べ方ができます(が、僕自身その使い方がよく分かっていないので説明は省きます)。
以下注意点など。
パターンは、1つのオブジェクト(またはグループ化したもの)をDefsに入れ、スタイルにパターンを適用したオブジェクトからLinkされて表示しています。そのためいくつ並べてもノードは増えないのでファイル容量はほとんど変化せず、またInkscapeの動作も重くなりません。が、他のフォーマットに対応していなかったりFirefoxで表示できません。
これに対してクローンタイルは、属性がCloneになっているだけでコピーして並べるのとほぼ同じ事をしているため、並べた数だけノードは増え、ファイル容量も動作も重くなります。
例えば用紙設定300*300 pxに直径1pxの網点を間隔1px(網点ドット=2px)で並べて敷き詰めるとき、パターンなら瞬時に処理されファイル容量も2〜3KB程度で済みますが、Firefoxでは表示できません。
これをクローンタイルで行うと、網点のコピーが150*150個作られるので総ノード数は9万個に達し、ファイル容量も3MBを超え、場合によってはInkscapeが強制終了しますがFirefoxで表示でき、psやpdfで保存しても反映されます。
オブジェクトをクリッピングしたときスタイルが変わらないようにしたい
(2つ選択してから)オブジェクト -> Clip -> Set または[Alt+O][P][S]
でPhotoshopで言うところのクリッピンググループ化レイヤーのように、下のオブジェクトと重なる部分(共通部分)以外をマスクする事ができますが、なぜかデフォルトの設定ではスタイルが下のオブジェクトのスタイルになってしまうので、
Inkscapeの設定 -> その他 -> Clipping and masking:
Use the topmost selected object as a clipping path or mask
をoffにすれば上のオブジェクトのスタイルを変えずにクリッピングできます(設定は即時反映)。
Inkscapeの設定を変えずに、クリッピングする前にオブジェクトのZ順を上下入れ替え、クリップ後にZ順を元に戻しても同じ事です。
フリーハンド線や閉じてないパスで線の抜き・入りを再現したい
フィル/ストロークダイアログのストロークスタイルで結合を角(デフォルト)、連結リミットの数字を大きく(デフォルト4 -> 12など。最大値100)すれば折れ点がソレっぽくなるけれど、閉じてないパスで線の抜き・入りを再現するのは不可能。
カリグラフィックペンを使えばある程度は可能。太さの値を大きめに(0.8くらい。最大値1.00)して、タブレットペンを早めに走らせると抜きらしくはなる。入りは無理かも。
※0.46ではカリグラフィックペンの書き味が大幅に改善されています。Sai並に滑らかな線が引けるようになりました(でも不安定)。
ズーム履歴の、[前のズーム]のショートカットが効かない
デフォルトのズーム履歴のショートカットは
次のズーム = [Shift]+
` または [Shift]+
~前のズーム =
`なのですが、「
`」は、日本語キーボードでは[Shift]キーなしでは打てないので前のズームのショートカットが効きません。
デフォルトのショートカットは
"C:\Program Files\Inkscape\share\keys\default.xml"(インストーラ版)
に書かれているので、これをテキストエディタで開いて
デフォルト(論理行189行目〜)
<bind key="grave" modifiers="Shift" action="ZoomNext" display="true"/> <!-- ` -->
<bind key="asciitilde" modifiers="Shift" action="ZoomPrev" /> <!-- ~ -->
(191行目は削除)
のように変更すれば、この例では次のズームはデフォルトのまま(=[Shift+@])、前のズームはチルダ(=[Shift+^])で操作可能になります。
このほかdefault.xmlを編集すればショートカットは好きなように変えられ(ると思い)ますが、ヘルプにもdefault.xmlにも書かれていないショートカットがいくつか存在するようなので、重複しないキーを探すのは大変かも。
例えば[Alt+z]は、コントロールバーの入力ボックスにキャレットが無い("|"が点滅していない)状態で押すと、使用ツールに関わらずステータスバー右下のズーム率のボックスをアクティブにします。
また選択ツール使用時オブジェクトを選択していると、テンキーの2,4,6,8キーはNum Lockのon/offに関わらずカーソルキーとして動作します(つまりフォーカスがメインウィンドウの入力ボックス以外の場所にあるときに、うっかりNum2468キーに触れてしまうと、設定-変化度-キーでの移動量に設定した分だけオブジェクトが移動してしまう)が、[Shift+arrow]の動作(=10pxナッジ)はNum Lockがoffでなければテンキーでは動作しません。テンキーの.(カンマ),1,3,7,9キーで印字下の動作を行う場合もNum Lockがoffの時のみ有効です([Num5]はページ全体表示)。
なお同フォルダには初めからIllustratorにショートカットを合わせたファイルなどが入っています(Illustratorに有ってInkscapeに無い機能のキーは当然ないし、その逆も書かれていない様です)。inkscape.xmlというファイルも同じフォルダに存在しますが、これは初期状態ではdefault.xmlと全く同じ物です(default.xmlを改変したときのバックアップ?)
[前/次のズーム]のように、日本語キーボードではそれぞれのキーが同じキーとして送信されてしまう場合はdefault.xmlを編集しなければなりませんが、それ以外(つまり普通に動作するショートカット)でもAutoHotKeyというツールを使うとショートカットキーをもっと簡単に入れ替えできます(最近初めて知った)。
僕はこんな感じに設定しています(
Inkscape用AutoHotKey Remaping)
Shift,Ctrl,Alt,ミ田以外のキーを装飾キーにする事も可能で、
vk1Dsc07B & x::send, +@ ;ZoomNext(無変換キー+xで次のズーム)
vk1Dsc07B & c::send, ~ ;ZoomPrev(default.xmlの編集内容と一致すること)
のように記述します。
キー1 & キー2::Space といった記述はNGで、コンビネーションキーでキーを送信する場合は必ず Send, {キー}としなければならないようです。
この場合、キー1を単独で押したときの本来の動作は失われるので、無変換キーをSpaceと入れ替えるには
vk1Dsc07B & Space::send, {Space}
のようにする必要があります(無変換キーを押しつつSpaceを押さないとSpaceは入力できない)。
パスに沿って文字を配置
テキストツールで文字入力、文字を沿わせたいパスを作成 -> テキストとパスを選択 -> テキストメニュー -> テキストをパス上に[Shift+D]
矩形や円・その他の図形では外接配置になるので、内接にする場合は -> 図形選択 -> 反転[H]
内接ではなく図形にフィットするなら -> テキストとパスを選択 -> テキストをフレームへ挿入[Alt+W]
パス上に配置または図形に挿入したテキストはパスの変形に改行がリンクします。またパスに沿わせたあとでもテキストツールで文字の編集はできます。
文字と文字の間隔を調整(カーニング)するには[Alt+左右矢印キー]で1pxずつ、[Shift+Alt+左右矢印キー]で10pxずつ間隔が調整できます(1文字ずつ)。
なおフローテキスト(フレームに挿入したテキスト)はフォントのままではブラウザで表示できません。文字検索が使えなくなりますがフローテキストをsvgのままブラウザで表示するにはフォントをパスに変換するしかありません(フォントをパスにするには[Shift+Ctrl+C]=オブジェクトをパスに変換)。
フローテキストでなくてもブラウザで表示できないフォントもあり、例えばメイリオ(meiryo.ttc)はIE+Adobe SVG Viewerで表示できますがFirefoxでは全く表示できません。
パスに沿ってオブジェクトを配置
スナップ設定で[Snap bounding boxes to object]と[Snap to object paths]をonにすれば選択範囲の角がセグメントにスナップする(選択ツール使用時)ので、1個ずつ並べるなら何とかなりそう。
ただしオブジェクトを回転変形中はどこにもスナップしません(回転後にノードツールで全ノード選択、[Snap node to object]と[Snap to object paths]をonにしてセグメントにスナップ可)。
※ 0.45インストーラではパスに沿ってパターンを配置できるようになった。
ストローク描画で選択範囲の内/外に沿って線を引く
ラスターグラフィックスエディタのような、選択範囲に沿ってストローク描画を実現するには、オブジェクトのスタイルにストロークを適用し、フィルをなしにすれば良いのですが、選択範囲の破線の内側/外側に沿って、たとえば1pixel幅のストロークを引く場合は
環境設定 -> 変化度 -> インセット/アウトセットを0.5pixelにしておき(設定は即時反映)、インセット[Ctrl+(] = [Ctrl+Shift+8]すると選択範囲の内側に沿ってストロークが描画されます(ノードやセグメントも同時に移動)。
アウトセット[Ctrl+)] = [Ctrl+Shift+9]すれば選択範囲の外側に沿って描画されます。
矩形などの水平線・垂直線で構成されるオブジェクトをラスタライズするとき、整数ピクセル幅指定のストロークを適用する場合には特に、これをやって整数ピクセルグリッドにストローク(の選択範囲)をフィットさせないと、ラスタデータの性質上 線が滲んで(ぼやけて)ラスタライズされてしまいます。
なお、図形属性のオブジェクトはインセット/アウトセットするとパスに変換されます。
同じオブジェクトでインセットを3回以上繰り返すと、どんどん形が変わってしまいます。
オブジェクトをロックしたら選択できなくなった
オブジェクトのプロパティでロックを1度セットしてしまうと、マウスや[Tab]では選択できなくなるので、ロックを解除するには検索[Ctrl+F]を表示して属性欄に"sodipodi:insensitive"(insだけでもヒットする)と書いて「ロックされたオブジェクトを含む」にチェックして検索。
ロックしたオブジェクトが1つだけならオブジェクトのプロパティでロック解除できます(検索でヒットしたオブジェクトは選択状態になる)。
複数のオブジェクトをロックした場合は検索でヒットしてもプロパティがグレーアウトしてしまうので、Inkscapeの設定 -> 選択で「ロックされたオブジェクトを選択しない」のチェックを外すと、設定がすぐに反映されて[Tab]選択できるようになります(ただしマウス選択はできない)。
1つのレイヤーにたくさんロックしたオブジェクトがあると、[Tab]で選択できたとしても探すのは大変なので、出来るだけレイヤーでロックするか、後ですぐ見つけられる名前(ID)をつけておくと良いかもしれません。
ちなみにロックしたオブジェクトはコピーしてもロックされたままになります。
オブジェクトを隠したら選択できなくなった
オブジェクトのプロパティで[隠す]にチェックしてしまった場合もロックしたときと同様に、検索窓で「非表示のオブジェクトを含む」にしてスタイル欄に"display:none"で検索できます
非表示のオブジェクトとはプロパティで隠したオブジェクトだけで、不可視状態のレイヤーに含まれるオブジェクトは検索でヒットしません。
これも同じくInkscapeの設定 -> 選択で「隠されたオブジェクトを選択しない」のチェックを外すと、設定がすぐに反映されて[Tab]選択できるようになります(マウス選択はできない)。
SVGソースでユーザー名がバレた
sodipodi:version="0.32"
inkscape:version="0.44"
sodipodi:docbase="C:\Documents and Settings\<ユーザー名>\My Documents"
sodipodi:docname="filename.svg">
SVGのソースを開く(テキストエディタ or ブラウザ or Inkscape XMLエディタ)と、このようにInkscapeが最後に保存したフォルダパス・ファイル名・エクスポートした場所などがそのまま書いてある行があります。
こういうのを嫌う方はデータドライブなどへ保存すると良いです。
というかユーザー名に日本語を使うのは論外として、半角スペースが含まれる保存パスもNGです。
フォルダパスなどをテキストエディタで削除する場合、""(ダブルコーテイション)内だけ消すか、行ごと削除しないと構文エラーになる場合があります。
一定時間作業すると自動バックアップファイルが
"C:\Documents and Settings\<ユーザー名>\tes.2007_08_30_01_42_21.0"のような形でユーザープロファイルフォルダに作成されますが、不幸にも未保存の状態で強制終了してしまうと、
"新規ドキュメント 1.2007_08_30_01_42_21.0"のような日本語を含むファイル名になってしまいます。これを放っておくと、どうもInkscapeが落ちやすくなるようです(未確認)。
Inkscape終了後に、不要であればまとめて削除するか、バックアップドライブなどに退避させておいたほうが良さそうです。
メモ帳に1行
del /q "%USERPROFILE%\新規ドキュメント*.0"
と書いて、拡張子をbatに変えて保存してこれを実行すると"新規ドキュメント"で始まるファイル名かつ拡張子が.0の自動バックアップファイルを一掃できます(注意:ゴミ箱にも残りません)。
他所でSVGを開いたら画像全体に
Xが・・・
初めて見ると大げさなメッセージにビックリしますが、これはファイルが壊れてしまったわけではなくて、"Linked Image not Found" とはWebページでたまに見るリンク切れの「404 Not Found」みたいなものです。つまりインポートしたラスター画像のパスが変わってしまったため警告しているだけなので、HTMLの構文
<IMG src= >と一緒でリンクを修正してそのパスに画像が存在すれば元の表示に戻ります。
InkscapeのXMLエディタを使って修正する場合は[Ctrl+F]で検索窓を表示して、XMLエディタを表示したまま属性を"link"とか"absref"として検索すれば、リンク画像の属性がXMLエディタに表示されるので、画像パスの値を編集してセットすればすぐに反映されて"not Found"の表示は消えます。
軽めのファイルで画像をたくさん挿入した場合は、テキストエディタの文字列置換で修正した方が早いかも。
例えばインポートした画像がjpgなら、テキストエディタでSVGを開いてjpgで検索すると
<image
xlink:href="shitagaki.jpg"
sodipodi:absref="C:\Documents and Settings\<ユーザー名>\My Documents\shitagaki.jpg"
のように書いてある行が見つかるので、sodipodi:absref属性の値のドライブ文字〜ファイル名の手前までを↓のように削除して、
sodipodi:absref="shitagaki.jpg"
テキストエディタで上書き保存後、画像をSVGと同じフォルダに置けばokです(リンク画像がSVGと同じ場所にあるならsodipodi:absref属性は特に必要ない)。
ただしInkscapeで開いているSVGをテキストエディタで上書きしてしまうと、今度こそ本当にファイルがファイルが壊れたりします。
svgファイルをテキストエディタで編集する場合は、文字/改行コードをそれぞれUTF-8N/LFで保存する必要があります(Windows標準のメモ帳では保存時にBOM付きUTF-8になるので注意)
通常のテキストエディタであればこの辺は自動判断してくれると思います。
たとえばTeraPadでは、ショートカットを1つ作りリンク先を
C:\Progra~1\TeraPad\TeraPad.exe /cu8n /el /html "%1"
のようにしておくとsvgソースが読みやすくなります(/cu8n /elは自動判断するので特に必要ない)。
Zoom率のステップが中途半端なのでなんとかしたい
↑に同じく必ずInkscapeが終了した状態で、
"C:\Documents and Settings\<username>\Application Data\Inkscape\preferences.xml"を開く。
preferences.xmlを開いたらzoomincrementで検索。value="1.414213562"
と書かれた行が見つかるので、例えばZoom率100%の状態から[+]キーを1回押したとき125%にするには、"1.25"に変更して(UTF-8N/LFで)保存します。
ただ、InkscapeのZoom率のステップは等刻み(100 -> 125 -> 150 -> 175)ではなく、現在のZoom率に対する乗算法になっているので、この変更を行っても殆ど意味がないと思います。
つまりzoomincrementを"1.25"にしても、100 -> 125(100*1.25) -> 158.25(125*1.25) -> 195.3125(158.25*1.25)
※Zoom率ボックスの値は整数に四捨五入されるが、2回目以降のZoomは小数点を含めた値で計算される。
そもそもこの設定はInkscapeの設定ダイアログからでも行えるのですが、GUIでの設定値は整数しか入力できないので、これを利用して以下のように設定すると、[1] -> [+]キーを押したときにプリントプレビューサイズ(印刷結果の原寸大)で表示できるようになります。
value="(25.4/ドットピッチ)/90"
※表示解像度が90dpi以上のモニタであること(ドットピッチ < 0.282mm)
ドットピッチはモニタ仕様表を参照すると大抵書いてあると思いますが、書いてなければ(モニタの表示幅/モニタ画素数(X))/90でも計算できます。
Zoom率100%で原寸表示とし、かつ、その状態で1px=1dot表示にするには
ビットマップイメージを切り抜いたり差分を取ったりするには
Inkscapeの設定 -> その他から<image>要素としてビットマップをインポートのチェックを外す。
そうすると次回からビットマップイメージは矩形要素で取り込まれます。あとは普通に円でも矩形でも重ねて、切り出したり差分も取れます。
このときビットマップはパターンとしてdefsに格納されており、矩形のスタイルにパターンを適用して表示されている形になります。
ところが、なぜか切り出した結果は上下反転してしまい、位置がずれてしまうので、切り出す場合はあらかじめ他のツールを使用してクロップしてからインポートするか、イメージを上下反転してから切り出すしかないようです。またクリッピングならこのような事はありません。
※ このバグは0.46で修正されています。
ちなみに矩形要素にしてもビットマップがベクタライズされて取り込まれているわけではないので、<image>要素と同様にファイルの場所を変えるとリンク切れになります。
なお<image>要素としてビットマップをインポートのチェックを外すと、ビットマップトレースは使えなくなります(Pattern to Objectsでimage要素に戻ります)。
カリグラフィックペン使用時、クリックロックが効いてしまう
コントロールパネル -> マウスのプロパティでクリックロックが有効になっていると、カリグラフィックペン使用時にタブレットペンにもクリックロックが反映されてまともに描画できなくなります(ペン先をタブレット操作面から離して動かしてもクリック状態のまま描画されてしまう)。
トラックボールタイプのマウスを使用していてクリックロックを使用したい場合は、Inkscapeの設定 -> その他から「筆圧感知タブレットを使用」を有効に(これは初期状態で無効になっています)してInkscapeを再起動。
マウス側のクリックロックを使用しなかったり、タブレットを使用していない場合はこの設定は関係ありません。
なお、タブレットを使用しているがInkscapeでは筆圧やペンの傾きを無効にしたい場合、ショートカットのリンク先やバッチの記述にinkscape.exe --ignore-wintabとして起動することで、Inkscape側の設定に関わらず強制的に筆圧や傾きを無効にできます(ただしクリックロックを使用する場合は --ignore-wintabで起動はNG)。
--ignore-wintabで起動するとCPU負荷を若干抑える事が出来ます。
エクスポートやGroups to PNGsで背景が透過にならない
ドキュメントプロパティ -> Background -> 背景色で不透明度が0以外の値になっている場合、または、たとえば用紙と同じ大きさの矩形などが背面にあってオブジェクトのプロパティで隠す設定になっていない場合は、pngで出力しても背景部分がページ背景色、または背面のオブジェクトの色になってしまいます。
default.svg(Inkscapeが最初に開くテンプレート)はbgcolorが不透明度0ですが、新規作成のテンプレート(black_opaqueなど)によってはbgcolorに色がついている物もあります。
また、Groups to PNGsでレイヤー単位でなくオブジェクトを1つずつ書き出す設定にしていても、背面に隠されていないオブジェクトがあればそれらは一緒にpngに重なってしまいます(これは下記の改良版Groups to PNGsを使えば解決します)。
<iframe>〜</iframe>にsvgを挿入したら背景が大変なことに
IEはgif以外の透過表示をサポートしておらず透明部分を白で表示し、Firefoxは透明部分をそのまま忠実に反映させて表示します。
結果、iframeで透過情報を持つsvgを表示すると、下図のようになります。
下の左側は、実際に<iframe>タグで表示しています。IEでこのページを見ている方には左側には何も見えません(IEオプションで背景色を変更すれば見えるかも)。
|
|
↑iframe |
↑左のiframeをFirefoxで見たイメージ |
星のグラデーションはマスター不透明度100%、アルファ値255の白を下に向かってアルファ値0にしてあり、svgのページ背景色はffffffff(不透明度100%の白)、iframeを表示しているTableの背景色は#000000です。
IEは白も透明部分も白。なので何も見えません。
Firefoxでは透明部分を忠実に表示するため、何もオブジェクトが無い部分はそのままTableの背景色が透けて見え、アルファ値255未満の白は黒とブレンドされてグレーで表示されてしまうわけです。
同じようにhtml背景色が赤で星のフィルが半透明の青ならば、IEでは白地に水色の星、Firefoxでは赤地に紫の星になって表示されます。
IEユーザーに正しい表示で見てもらうためにはsvgの最背面に用紙設定と同じサイズの矩形を置いて、矩形のフィル色を目的の色で不透明度100%にセットするしかないようです(ユーザーがオプションでブラウザの背景色を独自に変更している場合にも対処できる)。
ただしIEとFirefox(1.5)では、特に直線(水平・垂直)のオブジェクトを表示する場合において同じ表示になりません。詳細は
ブラウザによるsvgファイルの見え方にて。
メニューバーや、その他のUI文字が明朝体なのがイヤ
ヘルプ(チュートリアル)のSVGファイルは、フォント指定が
"Bitstream Vera Sans","Bitstream Vera Serif","sans serif"
の3種類使っているので日本語だけが変な書体になって読みづらいです。これらはテキストエディタで好みのフォントに一括置換して問題ありませんが、フォント名が日本語の物は完全NG、アルファベット表記の物でもフォントによっては表示がおかしくなる場合があるようです(MS UI Gothic,MS PGothic あたりならまず大丈夫。MeiryoはIEで表示可能だがFirefoxでは見れない)。
このページ上の画像はOsakaフォント(864TTC2)を使用させて頂いてます。
なおチュートリアルのテキストはフローテキストになっているのでブラウザでは表示できません。
その他メニューバーなどのUI文字を弄るには以下の2つのファイルをテキストエディタで編集します(Inkscapeを終了してから行う)。
@ Inkscapeインストールパス\etc\pango\pango.aliasesを編集
mingliuを日本語フォントに置換(フォント名が日本語の物は不可)
例)
courier = "courier new,Osaka"
tahoma = "tahoma,browallia new,Osaka,simhei,gulimche,ms gothic,kartika,latha,mangal"
sans = "arial,browallia new,Osaka,simhei,gulimche,ms gothic,kartika,latha,mangal"
serif = "times new roman,angsana new,Osaka,simsun,gulimche,ms gothic,kartika,latha,mangal"
mono = "courier new,courier monothai,Osaka,simsun,gulimche,ms gothic,kartika,latha,mangal"
monospace = "courier new,courier monothai,Osaka,simsun,gulimche,ms gothic,kartika,latha,mangal"
A Inkscapeインストールパス\etc\gtk-2.0\gtkrcを編集
例)
gtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32"
gtk-toolbar-icon-size = small-toolbar
# ↓フォント名に日本語が含まれる物は不可。ダブルコーテイション必須。
# このサイズはステータスバーのポインタ座標表示にも影響する。
gtk-font-name = "Osaka 9"
gtk-button-images = 0
# ↓menu-imagesを0(false)にするとパスメニューなどのアイコンが非表示になる
gtk-menu-images = 1
style "msw-default"
{
GtkWidget::interior-focus = 1
GtkOptionMenu::indicator-size = { 9, 5 }
GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 }
GtkSpinButton::shadow-type = in
GtkComboBox::appears-as-list = 1
GtkComboBox::focus-on-click = 0
GOComboBox::add_tearoffs = 0
GtkTreeView::allow-rules = 0
GtkTreeView::expander-size = 12
GtkExpander::expander-size = 12
GtkScrolledWindow::scrollbar_spacing = 1
GtkSeparatorMenuItem::horizontal-padding = 2
# ↓ここにフォント定義を入れるとコントロールバーの入力欄などにもフォントを指定できる
# 入れなければWindowsのデザイン->詳細設定で指定したフォントが反映される
# font_name="Osaka 9"
# ↓engine "wimp"の後の空の"{"+"改行"+"}"+"改行"は必須
engine "wimp"
{
}
}
class "*" style "msw-default"
Groups to PNGsするとオブジェクト単位で切り取られちゃう
Effects
-> エクスポート
-> Groups to PNGsはデフォルトで何故かそういう仕様になっています。
レイヤーを保持したままpsdやxcfで保存したいとき不便(というかソレするための"Groups to"だと思うんだけど、何でこういう仕様にしてあるんだろう)なので、上手い方法がないものか探していたら、ありました。
以下、2ch-CG板Inkscapeスレ
http://pc8.2ch.net/test/read.cgi/cg/1110171690/(Dat落ち)
948氏の書き込みから転載(+一部加筆)させていただきましたm(__)m。
行番号はすべて論理行です。
------------------------------------------------------------------------
pngの出力だけならEffects -> エクスポート -> Groups to PNGsでもできる。
ただ、このままだと解像度が低いので、スクリプトの本体をちょっと修正した方が良い。
@ C:\Program Files\Inkscape\share\extensions\g2pngs.inxの9行目に
<param name="dpi" type="int" min="72" max="1200" _gui-text="dpi">96</param>
(行頭は半角スペース8個)
を追加。
A C:\Program Files\Inkscape\share\extensions\g2pngs.pyの74行目の command=〜を
command = "inkscape -i %s -j --export-area-canvas -e %s -d %s %s " % (id, filename, self.options.dpi, svg_file)
(行頭は[Tab]文字3個)
に変更(最終的な行番号は78)。
B g2pngs.pyの43行目に戻って
self.OptionParser.add_option("-i", "--dpi", action="store", type="int", dest="dpi", default=96, help="Set resolution (dpi)")
(行頭は[Tab]文字2個)
を追加。
これで解像度を指定して各レイヤー(グループ)をpng形式で保存できる。
------------------------------------------------------------------------
B は改行なしでも動作しますが、上下の記述とインデントを揃えて
[Tab][Tab]self.OptionParser.add_option("-i", "--dpi",
[Tab][Tab][Tab][Tab][Tab][Tab]action="store", type="int",
[Tab][Tab][Tab][Tab][Tab][Tab]dest="dpi", default=96,
[Tab][Tab][Tab][Tab][Tab][Tab]help="Set resolution (dpi)")
としておいた方が良いかもしれません。
|
Inkscapeのデフォルトでは用紙サイズを無視してオブジェクトの選択範囲で切り出されてしまいますが、変更適用後は用紙サイズを保持し、ダイアログにはdpi設定が付加されます。
Save layers Onlyを有効にしておくと、1レイヤー1png(ファイル名は<g id>.png)で出力され、これが無効なときは1オブジェクト1png(ファイル名は<path id>.png,<rect id>など)で出力されます。 |
なのでオブジェクトが全く統合されていない状態でlayers Onlyがoffだと、どれが何なのか分からなくなる上、pngファイルの数も膨大になってしまうので、レイヤーに仕分けしておくか必要なものはパス統合してから使った方が良いと思います。
dpi設定は、Inkscapeでは90dpiのとき、オブジェクトがピクセル等倍(コントロールバーに表示されるピクセル数)で書き出されます。
例えば200%拡大してラスタライズするなら180にすれば縦横のピクセル数が2倍になります。
一度設定した値(保存先・解像度)は
"C:\Documents and Settings\<ユーザー名>\Application Data\Inkscape\preferences.xml"
に記録されているので、Inkscapeの設定「デフォルトの解像度」に関わらず、変更しなければ2度目以降も同じ値になります。
なお、保存パスに各ドライブ直下(C:\など)を指定するとエラーが出て動作しないようです。
初めて使うと、わりと長い時間python.exeのdos窓が表示されたままになるので固まったかと思ってしまうかもしれませんが、dos窓でキャレットが点滅している間は動作中です。
SVGのレイヤーを保持してPSD(or XCF)で保存したい
有志の方がすばらしいエクステンションを作ってくださいました。
Inkscape Wiki(http://wikiwiki.jp/inkscape/)にある、gimp_psd.zip(gimp_xcf.zip)をダウンロードして、
解凍したファイルをInkscapeインストールフォルダの/share/extensionsにコピーすると、保存するファイルの種類に*.PSD,*.XCFが追加されます(Gimp2のインストール or GIMP Portableが必須)。
いずれも出力前にデータ印刷解像度が指定でき、SVGのレイヤーも保持されます。
pngをレイヤーとして読み込むので、Gimpでsvgを開く場合と違ってパスはインポートされません
※
GimpはUIを表示せずにバックグラウンドで動作し、保存後に終了します。またG2PNGsでSave layers Onlyをonにしたときのように、こちらは1レイヤー1png(ファイル名は<g id>.png)のみの出力になります。
dpi設定はエクステンションのデフォルトで96にセットしてあるようですが、これを90にするとオリジナルのピクセル等倍サイズ(InkscapeでZoom率100%にしたときと同じピクセルサイズ)になります。
一度適用したGimpのパスやdpi設定はG2PNGsと同じく
"%USERPROFILE%\Application Data\Inkscape\preferences.xml"
に↓のように記録され、2度目以降もその値が反映されます。
<group
id="extensions"
org.ekips.output.gimp_xcf.dpi="90"
org.ekips.output.gimp_xcf.gimp="gimp-2.2.exe" />
※ G2PNGsの設定値もid="extensions"内にあります
用紙プロパティで単位を"mm"などにしていて、ピクセルに直すと端数が発生する場合は、小数点は四捨五入されて整数になります。このとき例えば同じA4タテサイズ/同じ印刷解像度にしても、プログラム上の小数点の扱いの違いによってラスターグラフィックスエディタ上の同じA4書類とピクセル数が等しくならない場合があるので、最終的にラスターで編集する書類であれば予め用紙プロパティでピクセル数を合わせた上で印刷解像度を90に指定して出力した方が良いです。
出力後のpsd(or xcf)の各レイヤー名は、一時保存フォルダ(TEMP)のサブディレクトリ(通常はC:\Temp\tmp??????)に保存されたpngファイルのフルパスになりますが、レイヤーの順番は保持され、レイヤーやスタイルの不透明度はRGBAのアルファ値として反映されます(例えばレイヤーの不透明度が50%ならアルファ値は127〜128。100%なら255)。
また、非表示レイヤーは表示レイヤーとして出力されますが、オブジェクトのプロパティで隠す設定にしたものは出力されません。
pngのファイル名は通常layer+数字.pngになり、これは上図のようにxmlエディタで<svg:g id>のid属性の値で確認できます(svgレイヤー名はinkscape:label属性の値)。レイヤー名を編集するときに同時にこの値を同じ名前にしてやれば、psdやxcfのレイヤー名にも反映できるようになります。
Gimp2をインストールしてあるのに、この拡張がうまく動作しないときはシステム環境変数のpathにGimpの実行ファイルのパスが定義されていない(いわゆるパスが通っていない)かもしれません。
パスが通っていなかった場合は、マイコンピュータの右クリックメニューから -> プロパティ -> 詳細設定 -> 環境変数と辿って、システム環境変数のペインからPATHを選択 -> 編集 -> 変数値の文字列の最後に、
Gimp2の実行ファイルのパスが"C:\Program Files\GIMP-2.0\bin\gimp-2.2.exe"である場合、
;C:\Program Files\GIMP-2.0\bin
を追加します(;セミコロンはセパレータ)。
システムを再起動して「ファイル名を指定して実行」で、gimp-2.2.exeと入力するだけでGimp2が起動するようになっていればokです。
([ミ田+R] -> cmd -> [Return] -> path -> [Return]でも確認できます)
他にも、GhostscriptがC:\gsにインストールされている場合は
;C:\gs\gs8.54\bin;C:\gs\gs8.54\lib
GTK+がC:\Program Files\Common Filesにインストールされている場合は
;C:\Program Files\Common Files\GTK\2.0\bin
なども確認した方が良いと思います。
Blurを適用したらGimpでsvgが開けない!?
表題の通り、スタイルにBlur(ぼかし)やグラデーションを適用したオブジェクトが1つでもあると、
-----------------------------------------------------------------------
Microsoft Visual C++ Runtime Library
Assertion failed!
Program: ...m Files\GIMP-2.0\lib\gimp\2.0\plug-ins\svg.exe
File: art_render_gradient.c
Line: 340
Expression: (offset_fraction != stops[ix-1].offset) || (d_offset >= 0.0)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts
(Press Retry to debug the application - JIT must be enabled)
-----------------------------------------------------------------------
のようなメッセージが表示されてsvgオープンに失敗します。
このあとGimpメッセージで「プラグインがクラッシュしました:"svg.exe"」と表示されますが、プラグインが壊れたのではないようです(Blurをベタ塗りなどに設定し直すと、開けるようになる)。
これを回避するには、
1) Blurを適用したオブジェクトを単体でpngエクスポート(範囲=ページサイズ)
(このときそれ以外のオブジェクトは全て非表示にする)
2) エクスポートしたらオブジェクトプロパティで"隠す"をセット(もしくは削除して別名保存)
3) svgを開き、pngをレイヤーとして読み込む(Gimpキャンバスにドロップ)
という手順でsvgの見た目通りに読み込めます。
読み込めたら、あとはpsdでもepsでもぼかしを適用させたままGimpで保存できます。
なお現時点のInkscapeでは、スタイルにBlurを適用したオブジェクトのほか半透明色を使用したグラデーションがあるとepsやpsで保存しても反映されません。
ただしグラデーションの場合は、見えている色をスポイトでコピーしてそれをメモしておき、グラデーションを編集して不透明色に編集し直せば、epsやpsで保存しても反映されます。
GTK+とかdllとかGimpとの共存とか
Inkscapeの安定度はGimpのインストールの有無やGTK+,glib,pangoのバージョンなどと関係しているようですが、GTK+などは新しければ良いというものではないようで、ぶっちゃけどれが良いのかさっぱりワカリマセン;
僕のケースだと、Inkscape0.44pre2(インストーラ版)+2006.07頃のナイトリービルドで重複ファイル(完全一致 1pass)を削除してそれ以外を上書き+Gimp2.2.12+gtk+-2.8.18で非常に安定 -> 某誌付録CD収録の1つ古いバージョンのGimpを入れたり出したりするうちにGimpが起動しなくなる -> Gimp2.2.12に戻す -> Inkscape-0.45pre0-1.win32(インストーラ版)+gtk+-2.10.7,glib-2.12.7,pango-1.14.9を突っ込んでみる -> Fill/StrokeダイアログにBlurキタ━━━━━━(゚∀゚)━━━━━━ !!
ので0.44には戻れない。でもちょっぴり不安定。みたいな。
Gimpをインストールしている環境では、Gimpが使用するGTK+"C:\Program Files\Common Files\GTK\2.0"以下のファイルと重複するdllをInkscapeインストールディレクトリ側から削除するとGimpのテーマセレクタ(スキン)がInkscapeでも使えるらしい(このページの画像でUIがアクアっぽくなっているのは全てWindow Blinds使用によるものです)。
ちなみに僕が見た限りでは、インストーラ版はインストールされたディレクトリ以下にGTK+のdllが見つからなければCommon Filesに有る方を参照するようですが、ナイトリービルド(GTK+が含まれる)を解凍したディレクトリからそのまま実行すると、Common Files内のdllには一切アクセスしないようでした(試しにナイトリービルドInkscape側の.\etc and .\libをディレクトリごと退避して起動してみたが、やはりCommon Filesへのアクセスは無かった。当然UIの2バイト文字は全て豆腐になる)。
僕の環境ではInkscapeが先、Gimpが後だったので、Gimpインストール時にまずGTK+が無いと言われ"gtk+-2.8.18-setup-1"をインストール -> Inkscapeと重複するdllが自動検索され、これからインストールしようとしているdll(libpng13.dll)が既に存在するのでリネームする?と聞かれる -> リネームすると"libpng13.dll.off"としてインストールされる -> Gimpが起動出来なかったのでlibpng13.dll.offをlibpng13.dllに戻す -> Inkscapeインストールフォルダの同名のdllをlibpng13.dll.bakにリネーム
でなんとかGimpも起動できるようになりInkscapeもきっちり動作してます(Inkscape起動時にはCommon Files内のlibpng13.dllにアクセスがある)。
このページで書いたような事をやっていると、あっという間にSVGが1.5MB〜2MBくらいになってしまうので、僕のへなちょこマシーンでそんなファイルを扱っていると新規レイヤーを作成しようとした途端エラーが出て強制終了したりします。まさに、息するたびに[Ctrl+S]するWin98時代のPhotoshopを彷彿させるスリル。
不運にも強制終了したときの自動バックアップファイルは
"C:\Documents and Settings\ユーザー名\"に
"ファイル名+_0.2007_02_18_00_36_06.0"
のように保存されていて、拡張子などは何も変更せずに、このままファイルのフルパスをコピー -> 開くダイアログに貼り付けで開けます。同フォルダに.gtk-bookmarksというファイルが作成されている場合は開くダイアログで追加したブックマーク本体です。
たまに自動バックアップすらコケてしまうお茶目な一面もありますが・・・。ちょっとLinux入れてみようかしら。