Мне пришло в голову, что на самом деле существует очень большая вероятность того, что вышивальная машина Bernina принимает файлы .DST. Хотя .ART является в некоторой степени стандартным для создания таких файлов, многие вышивальные машины принимают .DST, а их легко код и вывод.
Файлы .art находятся в двоичном формате составных файлов. Вы довольно легко их разделяете. 7zip сделает это. И любой мог написать что угодно, чтобы пройти через это. Однако внутри файлов обычно есть:
- [5] Сводная информация
- [5] WilcomDesignInformationDDD
- AUX_INFO
- СОДЕРЖАНИЕ
- DESIGN_ICON
Но пока все хорошо.
Обратите внимание, что это то же самое, что и формат .emb от Wilcom (хотя .art называет эту разбивку Grade C, потому что он не содержит файл векторной графики, который аналогичным образом сжат, когда он существует в emb)
В формате .emb файл содержимого начинается с 4-байтового младшего числа, указывающего размер файла в несжатом формате. За ним следует поток сжатия zlib. Полученные данные явно содержат файл вышивки со строками о нитях и триплетным кодом.
Так что это, конечно, выполнимо, но OP о .art. И здесь есть небольшая загвоздка. Где 00, похоже, что есть D2, который обычно предлагает однобайтовую смену.
F1 47 D2 D2 EE 9C 24 --- should be
46 2B 00 00 78 9C ED --- (the icon file sizes are always the same)
Битовая перестановка здесь: XOR D2, цикл-сдвиг-влево 1.
Таким образом, элемент содержимого в CFBF должен быть безымянным XOR 0xD2, циклически сдвинутым влево на 1. Затем первые четыре байта - это размер, а остальные - это поток сжатия zlib.
import compoundfiles
import zlib
def swizzle(b):
b ^= 0xD2
b <<= 1
b |= b >> 8
return b & 0xFF
def parse_art_file(file):
with open(file, 'rb') as f:
contents = compoundfiles.CompoundFileReader(f).open('Contents')
contents.seek(4) # file size
return zlib.decompress(bytes([swizzle(b) for b in contents.read()]))
Файлы .emb такие же, но не существует swizzle для содержимого.
Затем вы перепроектируете файл и т. Д.
person
Tatarize
schedule
13.12.2016