ag-psd
Version:
Library for reading and writing PSD files
83 lines • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.readAse = void 0;
var psdReader_1 = require("./psdReader");
function readAse(buffer) {
var reader = (0, psdReader_1.createReader)(buffer.buffer, buffer.byteOffset, buffer.byteLength);
var signature = (0, psdReader_1.readSignature)(reader); // ASEF
if (signature !== 'ASEF')
throw new Error('Invalid signature');
var versionMajor = (0, psdReader_1.readUint16)(reader); // 1
var versionMinor = (0, psdReader_1.readUint16)(reader); // 0
if (versionMajor !== 1 || versionMinor !== 0)
throw new Error('Invalid version');
var blocksCount = (0, psdReader_1.readUint32)(reader);
var colorTypes = ['global', 'spot', 'normal'];
var ase = { colors: [] };
var group = ase;
for (var i = 0; i < blocksCount; i++) {
var type = (0, psdReader_1.readUint16)(reader);
var length_1 = (0, psdReader_1.readUint32)(reader);
var end = reader.offset + length_1;
switch (type) {
case 0x0001: { // color
var nameLength = (0, psdReader_1.readUint16)(reader);
var name_1 = (0, psdReader_1.readUnicodeStringWithLength)(reader, nameLength);
var colorMode = (0, psdReader_1.readSignature)(reader);
var color = void 0;
switch (colorMode) {
case 'RGB ':
color = {
r: (0, psdReader_1.readFloat32)(reader),
g: (0, psdReader_1.readFloat32)(reader),
b: (0, psdReader_1.readFloat32)(reader),
type: colorTypes[(0, psdReader_1.readUint16)(reader)],
};
break;
case 'CMYK':
color = {
c: (0, psdReader_1.readFloat32)(reader),
m: (0, psdReader_1.readFloat32)(reader),
y: (0, psdReader_1.readFloat32)(reader),
k: (0, psdReader_1.readFloat32)(reader),
type: colorTypes[(0, psdReader_1.readUint16)(reader)],
};
break;
case 'Gray':
color = {
k: (0, psdReader_1.readFloat32)(reader),
type: colorTypes[(0, psdReader_1.readUint16)(reader)],
};
break;
case 'LAB ':
color = {
l: (0, psdReader_1.readFloat32)(reader),
a: (0, psdReader_1.readFloat32)(reader),
b: (0, psdReader_1.readFloat32)(reader),
type: colorTypes[(0, psdReader_1.readUint16)(reader)],
};
break;
default:
throw new Error('Invalid color mode');
}
group.colors.push({ name: name_1, color: color });
break;
}
case 0xC001: { // group start
var nameLength = (0, psdReader_1.readUint16)(reader);
var name_2 = (0, psdReader_1.readUnicodeStringWithLength)(reader, nameLength);
ase.colors.push(group = { name: name_2, colors: [] });
break;
}
case 0xC002: // group end
group = ase;
break;
default:
throw new Error('Invalid block type');
}
reader.offset = end;
}
return ase;
}
exports.readAse = readAse;
//# sourceMappingURL=ase.js.map