psdparse 0.10.0__tar.gz → 0.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. {psdparse-0.10.0 → psdparse-0.12.0}/PKG-INFO +4 -2
  2. {psdparse-0.10.0 → psdparse-0.12.0}/README.md +3 -1
  3. {psdparse-0.10.0 → psdparse-0.12.0}/docs/PYTHON_API.md +910 -810
  4. {psdparse-0.10.0 → psdparse-0.12.0}/docs/ROADMAP.md +4 -2
  5. {psdparse-0.10.0 → psdparse-0.12.0}/docs/SUPPORT.md +7 -2
  6. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psddata.h +31 -0
  7. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdengine.cpp +222 -3
  8. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdengine.h +34 -0
  9. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdfile.cpp +207 -4
  10. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdfile.h +78 -1
  11. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdimage.cpp +113 -0
  12. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdparse.cpp +14 -0
  13. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdwrite.cpp +26 -1
  14. {psdparse-0.10.0 → psdparse-0.12.0}/pyproject.toml +1 -1
  15. {psdparse-0.10.0 → psdparse-0.12.0}/python/psdparse_module.cpp +1501 -1352
  16. psdparse-0.12.0/tests/test_create_folder.py +118 -0
  17. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_layers.py +20 -0
  18. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_merged.py +31 -0
  19. psdparse-0.12.0/tests/test_text_engine_data.py +198 -0
  20. psdparse-0.12.0/tests/test_tree_view.py +110 -0
  21. {psdparse-0.10.0 → psdparse-0.12.0}/.gitignore +0 -0
  22. {psdparse-0.10.0 → psdparse-0.12.0}/CMakeLists.txt +0 -0
  23. {psdparse-0.10.0 → psdparse-0.12.0}/CMakePresets.json +0 -0
  24. {psdparse-0.10.0 → psdparse-0.12.0}/LICENSE +0 -0
  25. {psdparse-0.10.0 → psdparse-0.12.0}/Makefile +0 -0
  26. {psdparse-0.10.0 → psdparse-0.12.0}/docs/ARCHITECTURE.md +0 -0
  27. {psdparse-0.10.0 → psdparse-0.12.0}/examples/README.md +0 -0
  28. {psdparse-0.10.0 → psdparse-0.12.0}/examples/composite.py +0 -0
  29. {psdparse-0.10.0 → psdparse-0.12.0}/examples/extract_layers.py +0 -0
  30. {psdparse-0.10.0 → psdparse-0.12.0}/examples/variations.py +0 -0
  31. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/CMakeLists.txt +0 -0
  32. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/bmp.cpp +0 -0
  33. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psd_cli.cpp +0 -0
  34. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdbase.h +0 -0
  35. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psddesc.cpp +0 -0
  36. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psddesc.h +0 -0
  37. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdlayer.cpp +0 -0
  38. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdlayer.h +0 -0
  39. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdparse.h +0 -0
  40. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdresource.cpp +0 -0
  41. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdresource.h +0 -0
  42. {psdparse-0.10.0 → psdparse-0.12.0}/psdparse/psdwrite.h +0 -0
  43. {psdparse-0.10.0 → psdparse-0.12.0}/python/CMakeLists.txt +0 -0
  44. {psdparse-0.10.0 → psdparse-0.12.0}/tests/conftest.py +0 -0
  45. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_colormodes.py +0 -0
  46. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_comps.py +0 -0
  47. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_create.py +0 -0
  48. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_descriptors.py +0 -0
  49. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit.py +0 -0
  50. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_effects.py +0 -0
  51. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_mask.py +0 -0
  52. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_mask_pixels.py +0 -0
  53. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_name.py +0 -0
  54. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_pixels.py +0 -0
  55. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_rich_text.py +0 -0
  56. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_run_style.py +0 -0
  57. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_text.py +0 -0
  58. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_edit_text_placement.py +0 -0
  59. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_header.py +0 -0
  60. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_images.py +0 -0
  61. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_mask_extras.py +0 -0
  62. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_metadata.py +0 -0
  63. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_move_group.py +0 -0
  64. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_resources.py +0 -0
  65. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_save.py +0 -0
  66. {psdparse-0.10.0 → psdparse-0.12.0}/tests/test_text.py +0 -0
  67. {psdparse-0.10.0 → psdparse-0.12.0}/tools/psd_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: psdparse
3
- Version: 0.10.0
3
+ Version: 0.12.0
4
4
  Summary: Fast PSD (Photoshop) reader/writer — C++17 core with pybind11 bindings
5
5
  Keywords: psd,photoshop,parser,image,graphics
6
6
  Author-Email: wamsoft <wtnbgo@gmail.com>
@@ -45,7 +45,7 @@ Pure C++17 PSD (Photoshop) reader/writer library, with pybind11-based Python bin
45
45
 
46
46
  - Lazy I/O: PSD pixel data is **not** copied into memory at parse time. Only the structural metadata (a few hundred KB even for large files) is read upfront; layer pixels are paged in on demand via mmap or stream callbacks.
47
47
  - Round-trip save: `load(p) -> save(q)` produces a byte-identical PSD file.
48
- - **Edit & save**: add / delete / reorder / duplicate layers (folder-aware moves), copy layers between files, replace layer & mask pixels, edit parameters / names / masks / fill opacity, edit layer-effect (`lfx2`) values, and edit text layers (body text, per-run style, rich-text run/paragraph rebuild, placement & text box), or build a PSD from scratch — all with byte-exact re-serialization of the parts you touch (unedited layers stay byte-identical).
48
+ - **Edit & save**: add / delete / reorder / duplicate layers (folder-aware moves), copy layers between files, replace layer & mask pixels, edit parameters / names / masks / fill opacity, edit layer-effect (`lfx2`) values, and edit text layers (body text, per-run style, rich-text run/paragraph rebuild, placement & text box, **kept in step with the document-wide `Txt2` block so the edit actually reaches Photoshop**), or build a PSD from scratch — all with byte-exact re-serialization of the parts you touch (unedited layers stay byte-identical).
49
49
  - Python wrapper: `import psdparse` → `PSDFile.load(path) / layer_image(i) / merged_image() / save(path)` plus the editing API.
50
50
 
51
51
  The library was extracted from the [psdfile](https://github.com/wamsoft/psdfile) kirikiri plugin in 2026. psdfile now consumes this library as a submodule.
@@ -147,6 +147,8 @@ p.save(r"edited.psd")
147
147
  q = psdparse.PSDFile() # or build one from scratch
148
148
  q.create_blank(1024, 768)
149
149
  q.add_layer("bg", 0, 0, bgra_bytes, 1024, 768)
150
+ q.add_layer("line", 0, 0, bgra_bytes, 1024, 768)
151
+ q.add_folder("group", 1, 1) # wrap layers[1:2] in a group
150
152
  q.save(r"new.psd")
151
153
  ```
152
154
 
@@ -4,7 +4,7 @@ Pure C++17 PSD (Photoshop) reader/writer library, with pybind11-based Python bin
4
4
 
5
5
  - Lazy I/O: PSD pixel data is **not** copied into memory at parse time. Only the structural metadata (a few hundred KB even for large files) is read upfront; layer pixels are paged in on demand via mmap or stream callbacks.
6
6
  - Round-trip save: `load(p) -> save(q)` produces a byte-identical PSD file.
7
- - **Edit & save**: add / delete / reorder / duplicate layers (folder-aware moves), copy layers between files, replace layer & mask pixels, edit parameters / names / masks / fill opacity, edit layer-effect (`lfx2`) values, and edit text layers (body text, per-run style, rich-text run/paragraph rebuild, placement & text box), or build a PSD from scratch — all with byte-exact re-serialization of the parts you touch (unedited layers stay byte-identical).
7
+ - **Edit & save**: add / delete / reorder / duplicate layers (folder-aware moves), copy layers between files, replace layer & mask pixels, edit parameters / names / masks / fill opacity, edit layer-effect (`lfx2`) values, and edit text layers (body text, per-run style, rich-text run/paragraph rebuild, placement & text box, **kept in step with the document-wide `Txt2` block so the edit actually reaches Photoshop**), or build a PSD from scratch — all with byte-exact re-serialization of the parts you touch (unedited layers stay byte-identical).
8
8
  - Python wrapper: `import psdparse` → `PSDFile.load(path) / layer_image(i) / merged_image() / save(path)` plus the editing API.
9
9
 
10
10
  The library was extracted from the [psdfile](https://github.com/wamsoft/psdfile) kirikiri plugin in 2026. psdfile now consumes this library as a submodule.
@@ -106,6 +106,8 @@ p.save(r"edited.psd")
106
106
  q = psdparse.PSDFile() # or build one from scratch
107
107
  q.create_blank(1024, 768)
108
108
  q.add_layer("bg", 0, 0, bgra_bytes, 1024, 768)
109
+ q.add_layer("line", 0, 0, bgra_bytes, 1024, 768)
110
+ q.add_folder("group", 1, 1) # wrap layers[1:2] in a group
109
111
  q.save(r"new.psd")
110
112
  ```
111
113