<story><title>&quot;I think you will all appreciate this person&apos;s commenting style&quot;</title><url>http://jwz.livejournal.com/1774883.html</url></story><parent_chain><item><author>saurik</author><text>PSD was never intended to be a data interchange format: it is the serialization format of a single program that has more individual unrelated features that actual people rely on than almost any other piece of software and has maintained striking amounts of backwards compatibility and almost unbroken forwards compatibility during its over two decades of existence. This product&apos;s &quot;file format&quot; needs to be critiqued in this context, along with similar mega-programs like Office.&lt;p&gt;I am thereby having a difficult time fathoming why anyone would think that a PSD file is thereby going to be some well-organized file format that they should easily be able to parse from their own application is just naively wishful thinking: even other products from Adobe have limitations while opening these files; to truly manipulate these files you really need to be highly-compatible with Photoshop&apos;s particular editing model (hence the conceptual difference between these two classes of file format).</text></item></parent_chain><comment><author>jacobolus</author><text>Further points:&lt;p&gt;1) The specs are now much more publicly accessible than they used to be, and frankly the spec does a fairly reasonable job describing a tricky format relatively compactly. It requires a fair bit of knowledge of Photoshop to read and understand, but it’s mostly fairly explicit. Much better than many other proprietary document formats.&lt;p&gt;2) For someone with relatively extensive knowledge of photoshop, the format is fairly comprehensible, albeit complicated. The biggest part of the problem here is, as you say, that Photoshop just has a ton of features to support, so that becoming enough of a Photoshop expert to understand it all is a difficult undertaking by itself.&lt;p&gt;3) The code this comment is taken from only interacts with a small fraction of PSD features, and is frankly pretty awful code: hacky, ad-hoc, not modular at all, etc.&lt;p&gt;All that said, if someone was to redesign PSD format today, I’m sure it would be organized quite a bit differently, and would have much better re-use of a smaller number of features. (The same goes for Photoshop itself.)</text></comment>
<story><title>&quot;I think you will all appreciate this person&apos;s commenting style&quot;</title><url>http://jwz.livejournal.com/1774883.html</url></story><parent_chain><item><author>saurik</author><text>PSD was never intended to be a data interchange format: it is the serialization format of a single program that has more individual unrelated features that actual people rely on than almost any other piece of software and has maintained striking amounts of backwards compatibility and almost unbroken forwards compatibility during its over two decades of existence. This product&apos;s &quot;file format&quot; needs to be critiqued in this context, along with similar mega-programs like Office.&lt;p&gt;I am thereby having a difficult time fathoming why anyone would think that a PSD file is thereby going to be some well-organized file format that they should easily be able to parse from their own application is just naively wishful thinking: even other products from Adobe have limitations while opening these files; to truly manipulate these files you really need to be highly-compatible with Photoshop&apos;s particular editing model (hence the conceptual difference between these two classes of file format).</text></item></parent_chain><comment><author>CoolGuySteve</author><text>This is true, but there are container formats just as old like .mov that are quite nice to work with.  (While your still sniggering, keep in mind that .mov has a lot in common with MPEG4.)&lt;p&gt;Whenever I need to write a binary serialization format, I usually copy .mov&apos;s tree of structs format, it&apos;s ridiculously fast, extensible, and keeps people away from C++ terrible stream operators/Java&apos;s BinaryReaderWhateverFactoryErrorProneOneIntAtATimeReader.</text></comment>