2

I was looking for a way to read the Photoshop's color palette files.

As of yet there is no answer here, so I'd like to share my solution.

DayDreamer
  • 107
  • 9

1 Answers1

3

Photoshop stores color values as hexadecimals, with info at the end of the file and here's how you can read it with 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

Important sidenote: Adobe sometimes does weird stuff, like filling the last bits with 00ff ffff ffff, which totally ruins color amount recognition. I haven't found the documentation for the fileformat, so I don't really know what's going on there.

It seems the total_colors_count is the most reliable bit of information we have, as it is least likely to get filled with fff even if we make color tables 2 or 4 colors long, where as color_count has the tendency to be broken on less than 128 colors palette tables.

DayDreamer
  • 107
  • 9