Skip to content

Instantly share code, notes, and snippets.

@grkvlt
Created November 6, 2012 05:26
Show Gist options
  • Save grkvlt/4022772 to your computer and use it in GitHub Desktop.
Save grkvlt/4022772 to your computer and use it in GitHub Desktop.
PSD Commenting
while ([fh offsetInFile] + 12 <= imageoffs) {
uint32_t sign = [fh readUInt32BE];
uint32_t marker = [fh readUInt32BE];
uint32_t chunklen = [fh readUInt32BE];
off_t nextchunk = [fh offsetInFile] + ((chunklen + 3) & ~3);
// At this point, I'd like to take a moment to speak to you about the Adobe PSD format.
// PSD is not a good format. PSD is not even a bad format. Calling it such would be an
// insult to other bad formats, such as PCX or JPEG. No, PSD is an abysmal format. Having
// worked on this code for several weeks now, my hate for PSD has grown to a raging fire
// that burns with the fierce passion of a million suns.
//
// If there are two different ways of doing something, PSD will do both, in different
// places. It will then make up three more ways no sane human would think of, and do those
// too. PSD makes inconsistency an art form. Why, for instance, did it suddenly decide
// that these particular chunks should be aligned to four bytes, and that this alignment
// should not be included in the size? Other chunks in other places are either unaligned,
// or aligned with the alignment included in the size. Here, though, it is not included.
// Either one of these three behaviours would be fine. A sane format would pick one. PSD,
// of course, uses all three, and more.
//
// Trying to get data out of a PSD file is like trying to find something in the attic of
// your eccentric old uncle who died in a freak freshwater shark attack on his 58th
// birthday. That last detail may not be important for the purposes of the simile, but
// at this point I am spending a lot of time imagining amusing fates for the people
// responsible for this Rube Goldberg of a file format.
//
// Earlier, I tried to get a hold of the latest specs for the PSD file format. To do this,
// I had to apply to them for permission to apply to them to have them consider sending me
// this sacred tome. This would have involved faxing them a copy of some document or other,
// probably signed in blood. I can only imagine that they make this process so difficult
// because they are intensely ashamed of having created this abomination. I was naturally
// not gullible enough to go through with this procedure, but if I had done so, I would
// have printed out every single page of the spec, and set them all on fire. Were it
// within my power, I would gather every single copy of those specs, and launch them on a
// spaceship directly into the sun.
//
// PSD is not my favourite file format.
if (sign != "8BIM") break; // sanity check
switch (marker) {
case "Lr16":
layers = [XeePhotoshopLayerParser parseLayersFromHandle:fh parentImage:self alphaFlag:NULL];
break;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment