如何使用 Python 阅读 photoshop .act 文件
How to read photoshop .act files with Python
我正在寻找一种读取 Photoshop 调色板文件的方法。
目前还没有答案,所以我想分享我的解决方案。
Photoshop 将颜色值存储为十六进制,并在文件末尾提供信息,以下是使用 Python.
读取它的方法
from codecs import encode
def act_to_list(act_file):
with open(act_file, 'rb') as act:
raw_data = act.read() # Read binary data
hex_data = encode(raw_data, 'hex') # Convert it to hexadecimal values
total_colors_count = (int(hex_data[-7:-4], 16)) # Get last 3 digits to get number of colors total
misterious_count = (int(hex_data[-4:-3], 16)) # I have no idea what does it do
colors_count = (int(hex_data[-3:], 16)) # Get last 3 digits to get number of nontransparent colors
# Decode colors from hex to string and split it by 6 (because colors are #1c1c1c)
colors = [hex_data[i:i+6].decode() for i in range(0, total_colors_count*6, 6)]
# Add # to each item and filter empty items if there is a corrupted total_colors_count bit
colors = ['#'+i for i in colors if len(i)]
return colors, total_colors_count
重要旁注:Adobe 有时会做一些奇怪的事情,比如用 00ff ffff ffff
填充最后一位,这完全破坏了颜色数量识别。我还没有找到文件格式的文档,所以我真的不知道那里发生了什么。
似乎 total_colors_count 是我们拥有的最可靠的信息,因为它最不可能被 fff
填满,即使我们使颜色表长度为 2 或 4 种颜色,其中 color_count 倾向于在少于 128 种颜色的调色板表上被破坏。
我正在寻找一种读取 Photoshop 调色板文件的方法。
目前还没有答案,所以我想分享我的解决方案。
Photoshop 将颜色值存储为十六进制,并在文件末尾提供信息,以下是使用 Python.
读取它的方法 from codecs import encode
def act_to_list(act_file):
with open(act_file, 'rb') as act:
raw_data = act.read() # Read binary data
hex_data = encode(raw_data, 'hex') # Convert it to hexadecimal values
total_colors_count = (int(hex_data[-7:-4], 16)) # Get last 3 digits to get number of colors total
misterious_count = (int(hex_data[-4:-3], 16)) # I have no idea what does it do
colors_count = (int(hex_data[-3:], 16)) # Get last 3 digits to get number of nontransparent colors
# Decode colors from hex to string and split it by 6 (because colors are #1c1c1c)
colors = [hex_data[i:i+6].decode() for i in range(0, total_colors_count*6, 6)]
# Add # to each item and filter empty items if there is a corrupted total_colors_count bit
colors = ['#'+i for i in colors if len(i)]
return colors, total_colors_count
重要旁注:Adobe 有时会做一些奇怪的事情,比如用 00ff ffff ffff
填充最后一位,这完全破坏了颜色数量识别。我还没有找到文件格式的文档,所以我真的不知道那里发生了什么。
似乎 total_colors_count 是我们拥有的最可靠的信息,因为它最不可能被 fff
填满,即使我们使颜色表长度为 2 或 4 种颜色,其中 color_count 倾向于在少于 128 种颜色的调色板表上被破坏。