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

この記事は最終更新日から3年以上経過しています。

これはなに 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)
最終更新 2023/04/16
Hugo で構築されています。
テーマ StackJimmy によって設計されています。