2020年7月22日 星期三

Inkscape : Extensions : 升級至 1.0 後的災情

2020年7月22日 星期三
Inkscape 1.0 版已經發布,不過個人還沒有升級體驗,已經有網友留言提醒 Raster 2 Laser GCode generator 的 extension 不能用了。試了一下,果然卡住:


查了一下資料,Inkscape 1.0 extensions 的設定有異動,而且無法向下相容;此外,Inkscape 1.0 已經改採用 Python 3.x 了,這使得原來使用 Python 2.x 開發的小工具也得修改才能正常工作。

相關的升級資訊可以參考 Inkscape 的 wiki :

前面的錯誤訊息是 Raster 2 Laser GCode generator 的 extension 用到的 png.py 模組所造成的,它原來用的是適用 Python 2.x 開發的 0.0.16 版,改用 0.0.20 以上就可以適用於 Python 3.x
換上 0.0.20 版的 png.py 後,哈哈哈~錯誤訊息不同了:


是的!問題回到  Raster 2 Laser GCode generator 的主角 raster2laser_gcode.py 了!

錯誤訊息中已經告訴我們有一堆「過時」的語法要換掉:
例如:

self.OptionParser.add_option

要換成

self.arg_parser.add_argument


type="string"

要換成

type=str


type="inkbool"

要換成

type=inkex.Boolean


type="int"

要換成

type=int


Effect.affect

要換成

Effect.run()


self.args[-1]

要換成

self.options.input_file

此外,self.arg_parser.add_argument 中有空字串的 "" ,通通要去掉。

以為這樣就過關了嗎?

當然不!

Raster 2 Laser GCode generator 會使用到 command line 去匯出 png 圖檔,Inkscape 1.0 改變了 command line 的選項參數,原來匯出 png 圖檔的選項 -e 沒有了,必須換成 -o;新版預設圖片的背景透明度是 0,也得用 -y 1 來修正;另外解析度只接受整數,不能有小數 ......。

最後,應該是最後一關了吧?

Raster 2 Laser GCode generator 以 subprocess.Popen 來執行 inkscape command line 匯出 png 圖檔,但沒有正常的關檔,以致無法正常匯出圖形檔,改用 with 就可以讓它在工作結束時自己關檔。

未關檔的問題在 png.py 中也會出現,所以在 read_flat 裡,執行 return 前要加一行:

self.file.close()

上面把升級為 Inkescape 1.0 後,遇到的問題先記錄,再來看看有沒有辦法讓新舊版同時存在。


相關文章



2 則留言:

  1. 這篇文章太讚了!感謝分享!

    回覆刪除
  2. 您好:
    有引用的話, 註明一下姓名、出處吧 ^_^

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket