photocraft/crates
Brandon Thomas ffd811d679 feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399)
Opening a JPEG now estimates the quality it was saved at from its quantisation
tables (the Annex K tables of ITU-T T.81 scaled by the IJG quality curve; exact
for such tables, the closest fit otherwise). Opening a WebP records whether it
is lossless (VP8L) or lossy (VP8), and a lossy one's quality from its base
quantiser index. The settings live on the document (`Document::file_encoding`,
saved in .pcraft) and a save that asks for no quality writes the file back the
same way, as Photoshop's Save does: File › Save, Save As and Save a Copy start
there instead of the fixed codec defaults (quality 90, WebP always lossless).
An explicit quality still wins; new documents and other formats keep the
defaults. Hostile or truncated DQT/VP8 headers give no estimate, never a panic.

Refs #2399

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:13:51 -04:00
..
affinity AF.3: recognize current Affinity artboard properties (#2355) 2026-10-10 13:14:59 -04:00
algo Content-Aware tools: faster, cancellable at once, same pixels (P21, P22, P49) (#3395) 2026-10-12 00:11:10 -04:00
automation Security: harden document exports and automation inputs (#2269) 2026-10-11 23:18:52 -06:00
cms wasm: gate native-only constants so wasm32 builds without dead-code warnings (#2808) (#2813) 2026-10-10 17:48:19 -04:00
codecs feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
color fix(blend): keep 32-bit Hue/Saturation/Color/Luminosity above 1 (#1735) 2026-10-10 13:15:18 -04:00
compose Color Balance: Photoshop's per-channel levels and gamma curves (#3443) 2026-10-11 23:45:58 -04:00
doc feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
engine feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
format feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
geom Warp presets: Photoshop's Bezier control grids instead of approximations (#3444) 2026-10-11 23:56:17 -04:00
gpu Color Balance: Photoshop's per-channel levels and gamma curves (#3443) 2026-10-11 23:45:58 -04:00
heif Open HEIC/HEIF photos (#355) (#372) 2026-10-07 10:20:40 -04:00
io feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
ops History: count retained tiles incrementally below the byte budget (#1157) 2026-10-09 00:48:31 -04:00
paint Brush: draw the smoothing string from the brush to the pointer while drawing (#3479) (#3526) 2026-10-12 00:26:04 -04:00
plugins Plug-ins: keep the originating error across parallel bands (#1654) 2026-10-09 09:11:00 -04:00
psd PSD: cap the layer tree for psd_to_document; layered TIFF checks group depth (#2940) (#2975) 2026-10-11 11:20:32 -04:00
raster perf: Edit > Clear works tile by tile on large selections (#3463) (#3482) 2026-10-11 23:29:25 -04:00
raw Raw: open monochrome LinearRaw DNGs (1 sample per pixel) (#3497) (#3503) 2026-10-11 23:33:40 -04:00
tablet Pen tablets: Xwayland for a pen on Wayland, macOS monitor after NSApp (#639, #759) (#1070) 2026-10-09 05:08:44 +07:00
testkit Tests: one GPU harness at a time in every GPU test binary (WARP crash) (#3212) 2026-10-11 19:27:26 -04:00
text Use Fontconfig for Linux font discovery (#2330) (#2961) 2026-10-12 01:05:56 -04:00
ui-egui feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
vector Transform: Distort, Perspective and Warp keep shape layers live (#3009) (#3025) 2026-10-11 16:16:04 -04:00