Inkscapeで描いた画像をpngにバッチ変換する


（と言っても、Inkscapeにバッチ出力機能があるわけではなく、シェルから叩けるのでスクリプト書いてしまえ、という話。）

こんにちは、あんどろいどりんご([@mstssk](https://twitter.com/mstssk))です。

[Inkcape](https://inkscape.org/ja/)でわかめねこを描いたりAndroidアプリの画像リソースを描いたりしています。
描くのはいいんですが、各ファイルをdpiごとにエクスポートするのをメニューからポチポチやるのはめんどくさいですよね。
実は、Inkscapeはpngへのエクスポート程度なら、次の様にシェルからえいやとコマンド叩いてしまえます。

```bash:svgからpngへエクスポートする例
inkscape -z -f src.svg -e result.png
```

## PATHを通す

インストール方法は割愛。
InkscapeがインストールされているディレクトリにPATHを通しておく。
Macの場合は `/Applications/Inkscape.app/Contents/Resources/bin` 。
WindowsやLinuxディストリとかは、インストール方法によって違うだろうからよしなに。

## CUIからの実行

- Mac上でしか動作確認してない。
- Windowsでは制約があるようです。
[FAQ (Japanese) 私はWindowsを使ってます。コマンドラインパラメータがちゃんと動作してないみたいなんですけど!](http://wiki.inkscape.org/wiki/index.php/FAQ_(Japanese)#.E7.A7.81.E3.81.AFWindows.E3.82.92.E4.BD.BF.E3.81.A3.E3.81.A6.E3.81.BE.E3.81.99.E3.80.82.E3.82.B3.E3.83.9E.E3.83.B3.E3.83.89.E3.83.A9.E3.82.A4.E3.83.B3.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF.E3.81.8C.E3.81.A1.E3.82.83.E3.82.93.E3.81.A8.E5.8B.95.E4.BD.9C.E3.81.97.E3.81.A6.E3.81.AA.E3.81.84.E3.81.BF.E3.81.9F.E3.81.84.E3.81.AA.E3.82.93.E3.81.A7.E3.81.99.E3.81.91.E3.81.A9.21)

### ヘルプ表示

`--help`で使えるオプションが一覧できます。
png変換だけでなく、psやpdfにも出来るっぽいです。

```bash:ヘルプの表示
inkscape --help
```

### PNGのエクスポート

`-e`または`--export-png=`でPNGへのエクスポート。書き出し先のファイルパスを指定します。
`-f`または`--file=`で入力ファイルの指定。
サイズを指定するオプションもあります。

```bash:xxxhdpi用ランチャーアイコンを書き出す例
inkscape -f ic_launcher.svg -e app/res/drawable-xxxhdpi/ic_launcher.png -w 192 -h 192
```

## 各DPIのアイコン画像を書き出すシェルスクリプト

[絵文字マッシュ](https://play.google.com/store/apps/details?id=jp.mstssk.emoji_mush)で、タブ用アイコンをいくつも描いてるので一括で書き出すシェルスクリプト作りました。
アイコン用なので正方形前提。

https://gist.github.com/mstssk/8fb71af2dbb3095117ef

オプション

- n: dry-run。実行するコマンドをプレビューする。
- o: 出力先ディレクトリ。デフォルトは`./output/`
- s: (必須) 画像サイズ。mdpiでの画像サイズを指定します。他のdpiのサイズは比率で勝手に計算します。<br>
`Launcher`か`ActionBar`って書くと、ランチャー用(48dp)/ActionBar用(32dp)のサイズになります。<br>
※TODO: Material Designでは32dpじゃなく24dp！
- 元ファイルパス: svgファイルを指定する。同名のpngに書き出します。<br>
例えば、`hoge.svg`を`drawable-xxxhdpi/hoge.png`に書き出します。


```bash:使い方
$ ./export-png.sh
Usage: ./export-png.sh [-n] [-o <output_dir>] -s <base_size> inkscape_files ...
$ ./export-png.sh -n -s launcher -o app/res ic_launcher.svg
inkscape -z -f ic_launcher.svg -e app/res/drawable-xxxhdpi/ic_launcher.png -w 192 -h 192
inkscape -z -f ic_launcher.svg -e app/res/drawable-xxhdpi/ic_launcher.png -w 144 -h 144
inkscape -z -f ic_launcher.svg -e app/res/drawable-xhdpi/ic_launcher.png -w 96 -h 96
inkscape -z -f ic_launcher.svg -e app/res/drawable-hdpi/ic_launcher.png -w 72 -h 72
inkscape -z -f ic_launcher.svg -e app/res/drawable-mdpi/ic_launcher.png -w 48 -h 48
inkscape -z -f ic_launcher.svg -e app/res/drawable-ldpi/ic_launcher.png -w 36 -h 36
$ ./export-png.sh -n -s actionbar -o app/res ic_tab_*.svg
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-xxxhdpi/ic_tab_flags.png -w 128 -h 128
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-xxhdpi/ic_tab_flags.png -w 96 -h 96
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-xhdpi/ic_tab_flags.png -w 64 -h 64
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-hdpi/ic_tab_flags.png -w 48 -h 48
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-mdpi/ic_tab_flags.png -w 32 -h 32
inkscape -z -f ic_tab_flags.svg -e app/res/drawable-ldpi/ic_tab_flags.png -w 24 -h 24
...略...
```