Расшифровка файлов Adobe Color (*.ACO), необходимо ввести понимание синтаксиса
Поэтому я разрабатываю веб-приложение, чтобы легче было распространять цветовые палитры, созданные с помощью Photoshop, в формате *.ACO или *.ASE среди коллег, у которых нет таких программ. Я прошел довольно долгий путь, настраивая основы, но теперь я полностью застрял по той единственной причине, что не могу понять, как структурированы файлы образцов.
Вот что я получаю, когда открываю файл *.ASE в текстовом редакторе:
ASEF & S w a t c h 1 RGB & S w a t c h 2 RGB ?
Œ ?€ ?€ & S w a t c h 3 RGB ?oïð?)̪>mí & S w a t c h 1 RGB & S w a t c h 2 RGB ?
Œ ?€ ?€ & S w a t c h 3 RGB ?oïð?)̪>mí & S w a t c h 1 RGB & S w a t c h 2 RGB ?
Œ ?€ ?€ & S w a t c h 3 RGB ?oïð?)̪>mí & S w a t c h 1 RGB & S w a t c h 2 RGB ?
Œ ?€ ?€ & S w a t c h 3 RGB ?oïð?)̪>mí
и когда я открываю его в NP++, это выглядит так:
Я надеялся (и наивно ожидал), что формат будет в какой-то понятной структуре XML, но это явно не так...
Я попытался исследовать предмет и нашел эти источники:
http://www.nomodes.com/aco.html
http://www.selapa.net/swatches/colors/fileformats.php
http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/PhotoshopFileFormats.htm
Но, честно говоря, мне кажется сложным иметь возможность обернуть голову... Если кто-то, обладающий лучшими знаниями о форматах кодирования файлов или форматах цветового кодирования, имеет какой-либо вклад для меня, я был бы очень признателен!
Файлы доступны здесь для скачивания, если вы хотите посмотреть их:
3 ответа
То, что вы видите, является ASCII-представлением двоичного файла. В ссылке, которой вы поделились ранее, вы увидите, что формат файла является двоичным. Так что давайте возьмем это в качестве отправной точки. Теперь откройте файл и прочитайте его примерно так,
$handle = fopen("temp.aco", "rb");
while (!feof($handle))
{
$data = fread($handle, 2);
echo bin2hex($data)."<br/>";
}
Это открывает файл.aco и читает, пока не будет достигнут конец файла. Используя fread и устанавливая для второго параметра значение 2, вы читаете данные из файла объемом 2 байта. Затем вы увидите вывод так,
0001 0008 0000 fafa e2e2 dbdb 0000
Теперь, глядя на вашу другую ссылку, вы увидите, что первое число 0001 представляет номер версии 0008 представляет количество цветов в файле (в моем случае 8), тогда у вас есть тип цвета, который обычно будет 0000 (RGB) 0001 (HSB) 0002 (CMYK) см. Таблицу преобразования цветов для остальных.
Цвета состоят из 3 или 4 слов, поэтому иногда вы можете игнорировать последнее слово, оно будет нулевым. Итак, давайте посмотрим на пример этого,
0000- (тип RGB) fafa-(красный представлен диапазоном 0..65535) e2e2-(зеленый представлен диапазоном 0..65535) dbdb-(синий представлен диапазоном 0..65535) 0000-(в этом нет необходимости позиционируется так ноль)
Преобразовав прочитанные слова в беззнаковое целое и следуя таблице преобразования, вы получите соответствующие значения rgb. Вот мой код для разбора различных типов.
function colorInColorSpace($colorSpace, $w, $x, $y, $z){
// RGB
if($colorSpace==0){
$r = $w/256;
$g = $x/256;
$b = $y/256;
//z component not used in rgb format
print $colorSpace." ".$r." ".$g." ".$b."<br/>";
}
//HSB
else if($colorSpace==1){
$h = $w/182.04;
$s = $x/655.35;
$b = $y/655.35;
print $colorSpace." ".$h." ".$s." ".$b."<br/>";
}
//CYMK
else if($colorSpace==2){
$c = 100 - ($w/655.35);
$m = 100 - ($x/655.35);
$y = 100 - ($y/655.35);
$k = 100 - ($z/655.35);
print $colorSpace." ".$c." ".$m." ".$y." ".$k."<br/>";
}
//Lab
else if($colorSpace==7){
// print $colorSpace." ".bin2hex($w[0])." ".bin2hex($w[1])."<br/>";
}
//Grayscale
else if($colorSpace==8){
$greyscale = $w/39.0625;
print $colorSpace." ".$greyscale."<br/>";
}
//Wide CYMK
else if($colorSpace==9){
$c = $w/100;
$m = $x/100;
$y = $y/100;
$k = $z/100;
print $colorSpace." ".$c." ".$m." ".$y." ".$k."<br/>";
}
}
Надеюсь это поможет.
Просто для ссылки на другие, я столкнулся с подобной проблемой и нашел эту программу на C, которая читает файлы ACO и конвертирует их в HTML. http://www.hping.org/aco2html/
Это отличный инструмент, но, поскольку я хотел изменить его и сделать его лучше, я решил перенести его на JavaScript. Вот мой код на Github https://github.com/websemantics/Color-Palette-Toolkit
Там также живое демо
Наткнулся на этот пост, когда я искал способ расшифровки Adobe Swatch. Я не уверен, поможет ли это вам или нет в.ACO, но я нашел парня, который написал класс для извлечения цветов из формата.ASE:
Adobe Swatch Exchange Reader / Decoder! Неработающая ссылка