Skip to content

Releases: EmilDohne/PhotoshopAPI

v0.5.2

18 Dec 13:53
Compare
Choose a tag to compare

Bugfixes

Python

  • When calling ImageLayer.get_image_data() or ImageLayer.image_data it no longer fails if there is a mask channel with a different size than the image data itself
  • ImageLayer num_channels and channels properties now consider the mask channel instead of skipping it

v0.5.1

22 Oct 16:18
Compare
Choose a tag to compare

Bugfixes

  • The previous release (v0.5.0) had missing wheels in the release, we address this here. Any pip install of photoshop should target this version instead of v0.5.0

v0.5.0

22 Oct 15:07
d9e6454
Compare
Choose a tag to compare

The v0.5.0 Release primarily targets adding support for CMYK and Grayscale while also improving the overal consistency of the python bindings. Additionally we added support for trivially replacing image data.

Three new examples were added. Please feel free to check them out!

Roadmap

v0.6.0

  • Adjustment Layers
  • Smart Objects

Performance

  • Read and Write speeds of 8-bit files are about 30-40% faster
  • Read and Write speeds of 16- and 32-bit files are about 10-15% faster
  • Image data extraction from ImageLayer<T> now runs fully parallelized
  • Python channel extraction speed was greatly improved

Features:

C++ / General

  • Add optional ProgressCallback that can be passed to read and write functions for LayeredFile<T>
  • Add support for Unicode layer names. Preferring these over PascalString layer names.
  • Add support for CMYK color mode
  • Add support for Grayscale color mode
  • Make files Krita compatible
  • Add support for locked layers
  • Add a PhotoshopFile::findBitdepth() function which reads out the header and allows for programmatic dispatching of LayeredFile<T> instances
  • Add a LayeredFile<T>::flatLayers() function for getting a flattened layer hierarchy which can be iterated without recursion.
  • Add functions for swapping image data: ImageLayer<T>::setImageData(), Layer<T>::setMask()

Python

  • Added more verbose error logging if the image data provided as numpy array does not match what is expected
  • LayeredFile: add flat_layers property giving you a temporary view over all the layers allowing for easy flat traversal. This is especially useful when applying some operation to all layers like resizing.
  • Layer: add is_visible property
  • Layer: add is_locked property
  • Layer: add has_mask() function
  • ImageLayer: add set_image_data, set_channel_by_id and set_channel_by_index functions as well as making the image_data property read-writable
  • ImageLayer: add num_channels and channels properties

Bugfixes:

C++ / General

  • findLayerAs() function no longer raises an error if layer cannot be found but instead returns nullptr to be more consistent with LayeredFile<T>::findLayer()
  • Fix memory leak due to missing call to blosc2_schunk_free()
  • Fix bug where files with only GroupLayers would not be openable in photoshop
  • Mask channels passed to ImageLayer<T> as image data now get automatically forwarded to m_LayerMask

Python

  • Fixed bug where non c-style contiguous arrays wouldn't be parsed correctly (e.g. when using numpy.reshape()). This conversion is now forced in-place
  • Fix missing self argument in psapi-stubs

Deprecations

  • Deprecate Layer<T>::getMaskData() in favour of Layer<T>::getMask()

Breaking changes:

The main breaking changes are to what is considered the internal API. A lot of the files in Util/ were moved over to Core/ where appropriate.

ImageLayer<T> constructor now takes an int16_t rather than uint16_t

Python

  • The Layer.layer_mask property has been removed in favour of Layer.mask. This property is now read-writable

CI / Compiling

  • Cranked up warnings under MSVC to /W4 and /WX with some additional warnings
  • Added ASAN and Valgrind steps to CI for continuous checking of correctness
  • Added memory-mapped files as backend for faster load times

v0.4.0

09 Mar 11:38
87e38b3
Compare
Choose a tag to compare

The v0.4.0 Release primarily addresses miscellaneous bug-fixes as well as adding (experimental) support for ARM-based MacOS machines

To get started please download the binaries attached to the release below for your given system and programming language :). To download the python bindings you can also simply pip install PhotoshopAPI

Features:

  • Added (experimental) support for ARM-Based MacOS Systems (M-Chips)
  • Added tests for Python wheels on CI

Bugfixes:

  • #62 Python wheels on windows no longer require the vcredist to be installed
  • #60 When submoduling via CMake we no longer get a missing import error on C-Blosc2
  • Fixed Linux wheels not actually being usable

Known Issues

  • When using a try: except: block using the PhotoshopAPI on Apple Silicon based machines the code will segfault and crash the python interpreter. This is unfortunately due to XCode issues and will hopefully be resolved soon. For updates please visit #61 to get the latest status on this.
  • C++ Exceptions on Apple Silicon are not propagated and will instead simply segfault.

v0.3.0

27 Feb 13:58
18309e8
Compare
Choose a tag to compare

The v0.3.0 Release attempts to add backwards compatibility for linux python builds

To get started please download the binaries attached to the release below for your given system and programming language :). To download the python bindings you can also simply pip install PhotoshopAPI

Features:

  • Python Linux builds are now supported (with logging timestamps removed)

v0.2.1

27 Feb 10:36
123b3d5
Compare
Choose a tag to compare

This release is identical to v0.2.0 and only fixes upload to PyPi

Bugfixes:

  • Fix PyPi Upload

v0.2.0

27 Feb 09:47
884f2f8
Compare
Choose a tag to compare

The v0.2.0 Release primarily addresses adding Python bindings, hosting them on PyPi automatically using CI. As well as improving our CI for the C++ bindings to automatically upload artifacts and make the PhotoshopAPi cross-compatible.

To get started please download the binaries attached to the release below for your given system and programming language :). To download the python bindings you can also simply pip install PhotoshopAPI

Features:

  • #48. For more information please read the docs and check out the examples!
  • Improve CI to build release artifacts automatically
  • Make PhotoshopAPI cross-compatible on Linux and MacOS
  • Improve main README.md for better information on requirements
  • ImageLayer<T>::getChannel() can now also extract layer masks

Bugfixes:

  • Fix misspelled name in Glacius' benchmarks
  • Fix bug in ImageLayer<T>::getChannel() where we indexed based on a uint16_t which would fail on alpha and mask channels

v0.1.0

13 Feb 16:27
3c49ba3
Compare
Choose a tag to compare

This is the first official release of the PhotoshopAPI with the following features:

  • Read and write of *.psd and *.psb files
  • Creating and modifying simple and complex nested layer structures
  • Pixel Masks
  • Modifying layer attributes (name, blend mode etc.)
  • Setting the Display ICC Profile
  • Setting the DPI of the document
  • 8-, 16- and 32-bit files
  • RGB Color Mode
  • All compression modes known to Photoshop

For more information please check out the docs and the examples!

The binaries can be found zipped below (for Windows)