InkscapeでPSDファイルを出力する方法

これはなに Link to this heading

Inkscape でPSDファイルを出力するのに多少苦労したので、対応策を備忘録として残しておく。

環境 Link to this heading

結果だけ知りたい人のために Link to this heading

InkscapeでPSDファイルを出力するための設定手順を下記に記す。

  1. InkscapeGIMP をインストールする
  2. GIMPのパスを通す
    1. スタートメニューの検索窓で「環境変数を編集」を検索し開く
    2. 「ユーザー環境変数」にある「Path」を選択して「編集」をクリック
    3. 「新規」をクリックしてGIMPをインストールしたパス(デフォルトなら%PROGRAMFILES%\GIMP 2\bin)を追加する
    4. 「OK」をクリックして保存する
  3. 管理者権限でコマンドプロンプトを起動する
  4. GIMPへのパスが通っているか確認する
    1. コマンドプロンプトにgimp-2.10と打って実行(Enter)し、GIMPが起動すればOK
  5. gimpコマンドでgimp-2.10.exeが起動するようにする
    1. 管理者権限でコマンドプロンプトを開き、fsutil hardlink create "%PROGRAMFILES%\GIMP 2\bin\gimp.exe" "%PROGRAMFILES%\GIMP 2\bin\gimp-2.10.exe"を実行する -> ハードリンクが生成される
    2. コマンドプロンプトにgimpと打って実行(Enter)し、GIMPが起動すればOK
  6. Inkscapeにgimp_psdのextensionを追加する
    1. ここ からファイルをダウンロードし、任意の場所に保存する
    2. Inkscapeをインストールしたディレクトリを開く(デフォルトならC:\Program Files\Inkscape
    3. その中のshare\inkscape\extensions内に、ダウンロードしたファイルのgimp_psd.inxgimp_psd.pyを入れる

以上を設定すると、InkscapeでPSD形式のファイルを保存できるようになる。


背景 Link to this heading

InkscapeはデフォルトでPSDファイル出力をサポートしていない。 しかし、GIMPを利用してInkscapeからPSDを出力するextension「gimp_psd 」が、junichi11 さんによって開発されている。 これを適用すれば簡単にInkscapeでPSDファイルを出力できる。

…と思っていたのだが、単に適用しただけではInkscapeにエラー(FileNotFoundError)を吐かれてしまう。 下記にエラーの一例を示す。

Traceback (most recent call last):
  File "C:\Program Files\Inkscape\share\inkscape\extensions\gimp_psd.py", line 179, in <module>
    GimpXcf().run()
  File "C:\Program Files\Inkscape\share\inkscape\extensions\inkex\base.py", line 231, in run
    self.save_raw(self.effect())
  File "C:\Program Files\Inkscape\share\inkscape\extensions\inkex\base.py", line 277, in save_raw
    self.save(self.options.output)
  File "C:\Program Files\Inkscape\share\inkscape\extensions\gimp_psd.py", line 175, in save
    with open(xcf, 'rb') as fhl:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\<User Name>\\AppData\\Local\\Temp\\gimp-out-xxxxxxxx\\hogehoge.psd.psd'

何が問題だったのか Link to this heading

gimp_psdのプログラムにバグが生じていた。

GIMPのコマンドにパスを含む引数を渡すときに、なぜかはわからないが、パス区切り文字の\\が無視されていた。 そのため、InkscapeがTemp\\gimp-out-xxxxxxxxディレクトリに吐いた.pngファイルへアクセスできず、GIMPのコマンドが何も吐かずに終了していた。 よって、GIMPによって生成されるはずのhogehoge.psd.psdが生成されず、FileNotFoundErrorが生じた。

なお、パス区切り文字が\\になるのはWindowsだけなので、MacやLinuxではこのバグは生じないと思われる。

どう解決したのか Link to this heading

実行OSがWindowsのときだけ、パス区切り文字の\\/に置換して、GIMPのコマンドでパス区切り文字が無視されないようにした。

具体的には、gimp_psd -> gimp_psd.py の115行目以降に、下記のように手を加えた。

gimp_psd.py
        xcf = os.path.join(self.tempdir, "{}.psd".format(self.docname))

        if os.name == 'nt': # NOTE: if Windows
            xcf = xcf.replace(os.sep,'/')
            for k, v in pngs.items():
                pngs[k] = v.replace(os.sep,'/')

変更の詳細はこちら

こうすることで、パス区切り文字が無視されなくなり、正常にPSDファイルが出力されるようになった。

ちなみに Link to this heading

GIMPにパスを通すとInkscapeの出力ファイルに追加される.xcfの出力も、同じエラーで動かないと思われる。

適用しても動かないときに確認すること Link to this heading

まずはコマンドプロンプトでgimpコマンドを実行し、GIMPが起動するか確かめること。 GIMPにパスを通さないと動かない。 GIMPが起動しない場合は、環境変数にGIMPのパスが登録されていることを確認する。 パスが登録されていても動かないなら、GIMPを再インストールする。

それでも動かなければ、こちら にIssueを投げてほしい。

おわりに Link to this heading

junichi11 さんに、あらためて感謝の意を申し上げる。 このコードがなかったら諦めていただろう。

参考文献・URL Link to this heading

GPL (GNU General Public License)
最終更新 5月 21, 2023
Hugo で構築されています。
テーマ StackJimmy によって設計されています。