Как читать фотошоп.act файлы с помощью Python

Я искал способ прочитать файлы цветовой палитры Фотошопа.

Пока еще нет ответа, поэтому я хотел бы поделиться своим решением.

1 ответ

Решение

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 цветов.

Другие вопросы по тегам