Python 在工作上幫了我很多,不斷的累積後,也進入了思考怎麼樣才是好的命名的階段
在參考了各方大大的分享文章,以及自己使用Maya及Motionbuilder的經驗
確實各家有不同的命名規範:
以下是我自己覺得適合的命名模組
雖然有些知識還有些模糊,但過一陣子再檢視看看,有什麼可以改進的
I have been a 3D animator in game industry for over a decade. I also interested in script and love to solving problems. Now I am learning how to write plugin.
Python 在工作上幫了我很多,不斷的累積後,也進入了思考怎麼樣才是好的命名的階段
在參考了各方大大的分享文章,以及自己使用Maya及Motionbuilder的經驗
確實各家有不同的命名規範:
以下是我自己覺得適合的命名模組
雖然有些知識還有些模糊,但過一陣子再檢視看看,有什麼可以改進的
'''
@Jiapei Lu 2022
This tool is to export png per layer with baselayer, and make a folder for store all those exported pics.
It applys the name of the layer as a filename automatically.
Exported folder will be created under where the opened file is.
'''
from krita import *
import os
export_png_folder_name = 'export_png' # you can change the folder name here.
#Krita.instance().action('python_scripter').trigger()
doc = Krita.instance().activeDocument()#access to current file
doc_dir = os.path.dirname( doc.fileName( ))#get the file path
exportDir = os.path.join( doc_dir, export_png_folder_name)# building the path for exporting
#If folder doesn't exist then create the folder for export pics
if not os.path.isdir( exportDir):
os.makedirs( exportDir)
batchNodes = []#this for containing all the layer nodes
#First: Go over all layer turn off it's visible except basic layer.
for node in doc.topLevelNodes()[ 1:] :
node.setVisible( 0)
batchNodes.append( node )
#Second: Trun on the visible of the layers one by one then exporting it.
for node in batchNodes:
node.setVisible( 1)
doc.refreshProjection() #This is supper imported to refresh view. Otherwise the exported pic could be wrong.
info = InfoObject()# InfoObject is a dictionary with specific export options
info.setProperty( "alpha", True)
info.setProperty( "compression", 9)
info.setProperty( "forceSRGB", False)
info.setProperty( "indexed", False)
info.setProperty( "interlaced", False)
info.setProperty( "saveSRGBProfile", False)
info.setProperty( "transparencyFillcolor", [0,0,0])
path = os.path.join(exportDir, node.name() + ".png")
#node.save(path, doc.resolution(), doc.resolution(), info)
doc.setActiveNode( node)
doc.exportImage( path, info)
node.setVisible( 0)
doc.refreshProjection( )
Application.setBatchmode( False)
QMessageBox.information( Application.activeWindow().qwindow(), "Done and Done", "All done!")
https://vimeo.com/697820338
JiapeiShowcase_2022.mp4 from Jiapei Lu on Vimeo.
發生問題:
在mobu 2020利用os 連接路徑報錯,發現以Json.load()的字典格式,為unicode
而mobu無法辨識,需先將用到字串利用string.encode('utf-8')
才能使用
後來想想覺得應是在open()時,就可以先轉換,就不用對個案一個一個轉換
在網路查了相關的關鍵字"python2.x, json.load, dict, unicode, utf-8, open"
試了多個覺得可行的方式
像是open加入encoding
或是json.dump()加入encoding
import io
都沒什麼用
最後找到這個解最簡單,原網址https://www.jianshu.com/p/90ecc5987a18
def Read_Dict_Data( Dict_Data ):
import json
def byteify(input, encoding='utf-8'):
if isinstance(input, dict):
return {byteify(key): byteify(value) for key, value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode(encoding)
else:
return input
with open ( Dict_Data )as f:
data = json.load(f, encoding = 'UTF-8')# it is useless adding encoding when use json.load()
return byteify(data)
如果是Python3就沒有以上問題
多數網頁都沒清楚的說明python2與3的差別,所以記錄一下