* craft-psd: raise the 64-bit .abr sample budget to 2 GiB
Photoshop writes brush packs up to its 2 GB .abr limit; a 1 GiB budget
refused valid packs over it. 32-bit targets keep 512 MiB.
Ported from storytold/photocraft#13282 (photocraft#5949).
* craft-psd: FELS is checked and transcoded as filter effects
FELS holds the smart-filter masks of linked smart objects in the FEid
layout. check_structure now re-parses it, and a layered TIFF transcodes
it field by field: a little-endian save dropped the block as unknown.
Ported from storytold/photocraft#8275 (photocraft#8260); the test is new.
* craft-psd: a layered TIFF keeps external smart-object links
An external linked file (liFE) holds the descriptor of its link, and
from version 3 its bytes. The TIFF transcoder skipped both, so the record
failed to convert and a little-endian save dropped the lnkE block.
Ported from storytold/photocraft#6072; the test is new.
* craft-psd: the example and the save test write into fresh private directories
The big_psb example and the save_and_open test used a predictable temp
directory name, which a planted directory or symlink could take over.
They now create a new owner-only directory, and the example removes a
half-written fixture from its own default folder.
Ported from storytold/photocraft#13266 (its crates/psd part).
* craft-psd: the pixel preflight sees the merged image's compression and size
from_bytes_and_merged_preflight_info and
from_source_and_merged_preflight_info hand the preflight the merged
image's compression and encoded length before the image is read, so a
caller can estimate the memory a decode will need (an opaque RGB image
stored raw needs no inflate buffer). A missing compression field is
None, and a refusal takes precedence over it.
Ported from storytold/photocraft#11288 (its crates/psd part); the test is
new.
* craft-psd: typed layer selection ids (resource 1069)
ResourceData::LayerSelectionIds: the selected layers' ids in stored
order, duplicates and zero kept. The count is checked against the whole
payload before anything is allocated; truncated or trailing data is
malformed, not a partial selection.
Ported from storytold/photocraft#10268 (its crates/psd part).
* craft-psd: README matches the code
The typed blocks tsly, lmgm and vmgm, vector masks and slices typed by
path and slices, the resources ImageResource::parsed types, the ATN
round-trip caveats and version-12 reading, and the corpus test's
known-bad file.
Ported from storytold/photocraft#11600 (its crates/psd part), with the
resource list brought up to date.
* craft-psd: atn_dump escapes control characters from the file
A set's names, warnings, paths and errors are printed with control
characters escaped, so a file cannot drive the terminal.
Ported from storytold/photocraft#11218 (merged into PhotoCraft's copy
after craft-psd was moved).
* craft-psd: the .abr budget test checks the 64-bit bound at compile time
clippy refuses an assertion whose value is constant.
---------
Co-authored-by: rgoza1996 <97354241+rgoza1996@users.noreply.github.com>
Co-authored-by: Korg1ch <57859048+Korg1ch@users.noreply.github.com>
Co-authored-by: PJaYOfficial <1597623+PJaYOfficial@users.noreply.github.com>
Co-authored-by: acilione <antoninocilione96@gmail.com>
Co-authored-by: kirubhakaran12 <27127513+kirubhakaran12@users.noreply.github.com>
Co-authored-by: Nicolas Falesy <112726756+nicolasfalesy@users.noreply.github.com>
PhotoCraft's `photocraft-psd` crate (crates/psd at storytold/photocraft
63b641b55e54bf8f5c83efd977fdb16a2c255431) as `craft-psd`: the lossless
PSD/PSB model, reader, writer and builder, descriptors, the Photoshop
resource files that share its primitives (.abr, .asl, .aco, .act, .ase,
.grd, .pat, .atn, .csh, .shc) and the Photoshop blocks of a layered TIFF.
The crate had no dependency on any other PhotoCraft crate.
Code is unchanged apart from the crate name, craft-libs' rustfmt width,
comments that named other PhotoCraft crates, issue references (now
`photocraft#N`), and the corpus tests' directory (`CRAFT_PSD_CORPUS` or
`corpus/` at the workspace root). Tests, proptests, fuzz targets and
fixtures move with it.
Part of #778, #786.