pytoshop¶
Python library for reading and writing complex structured Photoshop files.
Contents:
pytoshop¶
A Python-based library to read and write Photoshop PSD and PSB files.
Based on the specification from Adobe, but also with the help of the psd-tools source code.
- Free software: BSD license
- Documentation: https://pytoshop.readthedocs.io.
Features¶
- Parsing of the most important tags. This is not complete, but the infrastructure is in place to add support for more quite easily.
- Loading of complex nested layer structures, and the ability to edit them and write them back out.
Installation¶
Stable release¶
To install pytoshop, run this command in your terminal:
$ pip install pytoshop
This is the preferred method to install pytoshop, as it will always install the most recent stable release.
If you don’t have pip installed, this Python installation guide can guide you through the process.
From sources¶
The sources for pytoshop can be downloaded from the Github repo.
You can either clone the public repository:
$ git clone git://github.com/mdboom/pytoshop
Or download the tarball:
$ curl -OL https://github.com/mdboom/pytoshop/tarball/master
Once you have a copy of the source, you can install it with:
$ python setup.py install
Usage¶
To read a file and write it back out again:
import pytoshop
with open('image.psd', 'rb') as fd:
psd = pytoshop.read(fd)
with open('updated.psd', 'wb') as fd:
psd.write(fd)
See the API documentation for more details.
API¶
User api¶
read (fd) |
Read a PSD file from a file-like object. |
user.nested_layers |
Convert a PSD file to/from nested layers. |
Objects¶
blending_range |
Manage blending ranges. |
core |
The core objects, including the PsdFile and its Header . |
color_mode |
The ColorModeData section. |
image_data |
The ImageData section. |
image_resources |
The ImageResources section. |
layers |
Sections related to image layers. |
path |
Handle Bézier paths. |
tagged_block |
TaggedBlock objects. |
Credits¶
Development Lead¶
- Michael Droettboom <mdboom@gmail.com>
Parts of this code were inspired by psd-tools, so a huge thanks to Mikhail Korobov and the rest of the psd-tools team.
Contributors¶
History¶
1.2.1 (2018-11-30) (2017-12-13) (2017-09-26)¶
Bugfixes:
- Fix #4: Change masked layer to same size as image layer when using
the
user.nested_layers
interface.
1.0.1 (2017-08-01) (2017-07-29)¶
- Declared API as stable.
0.6.0 (2017-07-24)¶
Minor improvements:
- Make it easier to choose the right channel, given the current color mode.
0.5.0 (2017-07-03)¶
Minor improvements:
- The color assigned to a layer (displayed in the layer list) is now
available in the
nested_layers
API.
Bugfixes:
- Fix crash in
GuideResourceBlock
.
0.4.1 (2017-06-05)¶
Minor improvements:
- Parse multiple values in a struct together when possible. This has a modest speed improvement.
Bugfixes:
- Fix pip install [#1]
- The main canvas image will use the specified compression algorithm when using nested_layers_to_psd.
- Non-image layers correctly set “pixel_data_is_irrelevant” flag.
0.4.0 (2017-05-12)¶
Improvements:
- For speed purposes, pytoshop no longer uses traitlets.
- Performance improvements to the compression/decompression code.
- Added support for the
shmd
metadata tagged block, and the ability to access it from theuser.nested_layers
API.
Bugfixes:
- Updated the list of tagged blocks that use 8-bit lengths.
- Fixed a bug where the image data would be corrupted when writing images from an input file to an output file with a different file format version.
- Fixed a crash when the input file contains no layer group ids.
- Allow Numpy arrays of shape () in place of scalars for constant images.
0.3.0 (2017-01-09)¶
Improvements:
pytoshop
now runs on Python 2.7, in addition to 3.4 and 3.5.- Many of the image resources types are now handled directly, rather than through a generic bytes-only interface.
- Major speedups in compression codecs.
Bugfixes:
- Saving a layer with a constant color (in
nested_layers_to_psd
) now works correctly. - Unicode string decoding now properly handles trailing zeroes.
- The “name source” on layers (when created from
nested_layers_to_psd
) would point to the wrong source, but is now fixed. - Fix a bug when writing a layer of width 1.