# psd-tools / README.rst

 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 8efc29a 2012-10-30 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 4cac2b9 2012-10-14 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 8efc29a 2012-10-30 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 97f226b 2012-10-16 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 8efc29a 2012-10-30 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 8efc29a 2012-10-30 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14 Mikhail Korobov 322997a 2012-10-27 Mikhail Korobov 0b3bda3 2012-10-14  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 psd-tools ========= psd-tools is a package for reading Adobe Photoshop PSD files (as described in specification_) to Python data structures. .. _specification: https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/PhotoshopFileFormats.htm Installation ------------ :: pip install psd-tools There are also optional dependencies: docopt_ for command-line interface and PIL_ (or Pillow_) for accessing PSD layer data as PIL images:: pip install Pillow pip install docopt .. _docopt: https://github.com/docopt/docopt .. _PIL: http://www.pythonware.com/products/pil/ .. _Pillow: https://github.com/python-imaging/Pillow Usage ----- Load an image:: >>> from psd_tools import PSDImage >>> psd = PSDImage.load('my_image.psd') Access its layers:: >>> psd.layers [, , ] Work with a layer group:: >>> group2 = psd.layers[0] >>> group2.name Group 2 >>> group2.visible True >>> group2.closed False >>> group2.opacity 255 >>> from psd_tools.constants import BlendMode >>> group2.blend_mode == BlendMode.NORMAL True >>> group2.layers [] Work with a layer:: >>> layer = group2.layers[0] >>> layer.name Shape 2 >>> layer.bbox (40, 72, 83, 134) >>> layer.width, layer.height (43, 62) >>> layer.visible, layer.opacity, layer.blend_mode (True, 255, u'norm') >>> layer.as_PIL() Export a single layer:: >>> layer_image = layer.as_PIL() >>> layer_image.save('layer.png') Export the merged image:: >>> merged_image = psd.composite_image() >>> merged_image.save('my_image.png') Why yet another PSD reader? --------------------------- There are existing PSD readers for Python: * psdparse _; * pypsd _; * there is a PSD reader in PIL_ library; * it is possible to write Python plugins for GIMP_. PIL doesn't have an API for layer groups, PSD reader in PIL is incomplete and contributing to PIL is somehow complicated because of the slow release process. GIMP is cool, but it is a huge dependency, its PSD parser is not perfect and it is not easy to use GIMP Python plugin from *your* code. I also considered contributing to pypsd or psdparse, but they are GPL and I was not totally satisfied with the interface and the code (they are really fine, that's me having specific style requirements). So I finally decided to roll out yet another implementation that should be MIT-licensed, systematically based on the specification_; parser should be implemented as a set of functions; the package should also have tests and support both Python 2.x and Python 3.x. .. _GIMP: http://www.gimp.org/ Design overview --------------- The process of handling a PSD file is splitted into 3 stages: 1) "Reading": the file is read and parsed to low-level data structures that closely match the specification. No PIL images are constructed; image resources blocks and additional layer information are extracted but not parsed (they remain just keys with a binary data). The goal is to extract all necessary information from a PSD file. 2) "Decoding": image resource blocks and additional layer information blocks are parsed to a more detailed data structures (that are still based on a specification). There are a lot of PSD data types and the library currently doesn't handle them all, but it should be easy to add the parsing code for the missing PSD data structures if needed. After (1) and (2) we have an in-memory data structure that closely resembles PSD file; it should be fairly complete but very low-level and not easy to use. So there is a third stage: 3) "User-facing API": PIL images of the PSD layers are created and combined to a user-friendly data structure. Stage separation also means user-facing API may be opinionated: if somebody doesn't like it then it should possible to build an another API (e.g. without PIL) based on lower-level decoded PSD file. Contributing ------------ Development happens at github and bitbucket: * https://github.com/kmike/psd-tools * https://bitbucket.org/kmike/psd-tools The main issue tracker is at github: https://github.com/kmike/psd-tools/issues Feel free to submit ideas, bugs, pull requests (git or hg) or regular patches. In case of bugs it would be helpful to provide a small PSD file demonstrating the issue; this file may be added to a test suite. In order to run tests, install tox _ and type :: tox from the source checkout. The license is MIT. 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.