查了一下資料,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 後,遇到的問題先記錄,再來看看有沒有辦法讓新舊版同時存在。
這篇文章太讚了!感謝分享!
回覆刪除您好:
回覆刪除有引用的話, 註明一下姓名、出處吧 ^_^