pytoshop

Python library for reading and writing complex structured Photoshop files.

Contents:

pytoshop

https://img.shields.io/pypi/v/pytoshop.svg https://img.shields.io/travis/mdboom/pytoshop.svg Documentation Status Coverage status

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.

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.

Enums

enums Enumerated values used throughout the library.

Codecs

codecs Coders and decoders for the various compression types in PSD.

Utilities

util Miscellaneous utilities.

Credits

Development Lead

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 the user.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.