https://github.com/cgohlke/psdtags
Read and write layered TIFF ImageSourceData and ImageResources tags.
https://github.com/cgohlke/psdtags
format-reader photoshop psd python tiff
Last synced: 6 months ago
JSON representation
Read and write layered TIFF ImageSourceData and ImageResources tags.
- Host: GitHub
- URL: https://github.com/cgohlke/psdtags
- Owner: cgohlke
- License: bsd-3-clause
- Created: 2022-01-15T01:14:15.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-01-02T03:03:17.000Z (9 months ago)
- Last Synced: 2025-04-24T23:03:47.793Z (6 months ago)
- Topics: format-reader, photoshop, psd, python, tiff
- Language: Python
- Homepage: https://pypi.org/project/psdtags
- Size: 389 KB
- Stars: 25
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
..
This file is generated by setup.pyRead and write layered TIFF ImageSourceData and ImageResources tags
===================================================================Psdtags is a Python library to read and write the Adobe Photoshop(r) specific
ImageResources (#34377) and ImageSourceData (#37724) TIFF tags, which contain
image resource blocks, layer and mask information found in a typical layered
TIFF file created by Photoshop.The format is specified in the
`Adobe Photoshop TIFF Technical Notes (March 22, 2002)
`_
and
`Adobe Photoshop File Formats Specification (November 2019)
`_.Adobe Photoshop is a registered trademark of Adobe Systems Inc.
:Author: `Christoph Gohlke `_
:License: BSD 3-Clause
:Version: 2025.1.1
:DOI: `10.5281/zenodo.7879187 `_Quickstart
----------Install the psdtags package and all dependencies from the
`Python Package Index `_::python -m pip install -U psdtags[all]
View the layer image and metadata stored in a layered TIFF file::
python -m psdtags file.tif
See `Examples`_ for using the programming interface.
Source code, examples, and support are available on
`GitHub `_.Requirements
------------This revision was tested with the following requirements and dependencies
(other versions may work):- `CPython `_ 3.10.11, 3.11.9, 3.12.8, 3.13.1 64-bit
- `NumPy `_ 2.1.3
- `Imagecodecs `_ 2024.12.30
(required for compressing/decompressing image data)
- `Tifffile `_ 2024.12.12
(required for reading/writing tags from/to TIFF files)
- `Matplotlib `_ 3.10.0
(required for plotting)Revisions
---------2025.1.1
- Improve type hints.
- Support Python 3.13.2024.5.24
- Fix docstring examples not correctly rendered on GitHub.
2024.2.22
- Fix reading PsdBoolean (#10).
- Fix order of PsdReferencePoint coordinates (breaking).
- Allow reading unaligned PsdLayer blending_ranges.2024.1.15
- Fix multi-threading.
2024.1.8
- Add option to compress layer channels in multiple threads.
- Improve logging.
- Drop support for Python 3.9 and numpy < 1.23 (NEP29).2023.8.24
- Fix channel data in layer and pattern blocks must be in big-endian order.
2023.6.15
- Use PsdThumbnailFormat enum for PsdThumbnailBlock.format.
2023.4.30
- Few API changes (breaking).
- Improve object repr.
- Drop support for Python 3.8 and numpy < 1.21 (NEP29).2023.2.18
- Allow unknown PsdKeys (#5).
2023.2.8
- Change PsdPoint and PsdReferencePoint signatures (breaking).
- Add helper function to create composite from layers.2022.8.25
- Update metadata.
2022.2.11
- Fix struct padding.
- Support TiffImageResources.2022.2.2
- Various API changes (breaking).
- Handle additional layer information.
- Preserve structures of unknown format as opaque bytes.
- Add options to skip tag structures of unknown format.
- Add abstract base class for tag structures.
- Add classes for many structures.2022.1.18
- Various API changes (breaking).
- Various fixes for writing TiffImageSourceData.
- Support filter masks.
- Add option to change channel compression on write.
- Warn when skipping ResourceKey sections.2022.1.14
- Initial release.
Notes
-----The API is not stable yet and might change between revisions.
This library has been tested with a limited number of files only.
Additional layer information is not yet supported.
Consider `psd-tools `_ and
`pytoshop `_ for working with
Adobe Photoshop PSD files.Layered TIFF files can be read or written by Photoshop, Affinity Photo, and
Krita.See also `Reading and writing a Photoshop TIFF
`_.Examples
--------Read the ImageSourceData tag value from a layered TIFF file and iterate over
all the channels:.. code-block:: python
>>> isd = TiffImageSourceData.fromtiff('layered.tif')
>>> for layer in isd.layers:
... layer.name
... for channel in layer.channels:
... ch = channel.data # a numpy array
...
'Background'
'Reflect1'
'Reflect2'
'image'
'Layer 1'
'ORight'
'I'
'IShadow'
'O'Read the ImageResources tag value from the TIFF file, iterate over the blocks,
and get the thumbnail image:.. code-block:: python
>>> res = TiffImageResources.fromtiff('layered.tif')
>>> for block in res.blocks:
... blockname = block.name
...
>>> res.thumbnail().shape
(90, 160, 3)Write the image, ImageSourceData and ImageResources to a new layered TIFF file:
.. code-block:: python
>>> from tifffile import imread, imwrite
>>> image = imread('layered.tif')
>>> imwrite(
... '_layered.tif',
... image,
... byteorder=isd.byteorder, # must match ImageSourceData
... photometric='rgb', # must match ImageSourceData
... metadata=None, # do not write any tifffile specific metadata
... extratags=[isd.tifftag(maxworkers=4), res.tifftag()],
... )Verify that the new layered TIFF file contains readable ImageSourceData:
.. code-block:: python
>>> assert isd == TiffImageSourceData.fromtiff('_layered.tif')
>>> assert res == TiffImageResources.fromtiff('_layered.tif')View the layer and mask information as well as the image resource blocks in
a layered TIFF file from a command line::python -m psdtags layered.tif
Refer to the `layered_tiff.py` example in the source distribution for
creating a layered TIFF file from individual layer images.