mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-31 07:39:08 +00:00
The PDF Optimizer and Reduce File Size downsampled colour and grey images
but not black-and-white ones. Settings::mono is now MonoSettings {
downsample, target_ppi, above_ppi, compression }, 300 ppi above 450 ppi
and CCITT Group 4 by default (Monochrome Images ▸ Downsample to;
doc_optimize mono: { downsample, ppi, above_ppi, compression }).
A 1-bit image or image mask (no filter, general-purpose filters, or CCITT
fax after any of them) and eight-bit grey of only black and white are averaged by
area: each new pixel takes the sample covering more of it, a tie 0, so a
dark line half a new pixel wide stays. They are stored as Group 4, or as
1-bit Flate when that is smaller; with Retain a resampled image keeps its
kind of compression. Images with a soft mask keep their size.
CCITT decoding moves from Export ▸ Images into pdfcraft-filters
(decode_ccitt, CcittParams, through hayro-ccitt), and
pdfcraft_cos::Document::decoded_image reads a fax image's /DecodeParms
for it (undoing filters before CCITT, such as ASCII85Decode, with any
/DecodeParms given by reference made direct first), so export
and the optimizer share one reader, and Group 4 scans can be
downsampled. A 600 ppi text page went from 79 KB to 40 KB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BfMGHQNgdq5yf5tKZHGR3z
28 lines
889 B
TOML
28 lines
889 B
TOML
[package]
|
|
name = "pdfcraft-optimize"
|
|
description = "The PDF Optimizer: image downsampling and recompression, discarding objects, clean-up"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
repository.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
pdfcraft-cos = { workspace = true }
|
|
pdfcraft-filters = { workspace = true }
|
|
pdfcraft-content = { workspace = true }
|
|
pdfcraft-model = { workspace = true }
|
|
pdfcraft-annot = { workspace = true }
|
|
thiserror.workspace = true
|
|
# JPEG decoding (zune-jpeg) and encoding, and bicubic resampling; already in the tree.
|
|
image = { version = "0.25", default-features = false, features = ["jpeg"] }
|
|
# The same JPEG decoder, used directly to read samples untransformed (/ColorTransform 0).
|
|
zune-jpeg = "0.5"
|
|
|
|
[dev-dependencies]
|
|
pdfcraft-render = { workspace = true }
|
|
proptest.workspace = true
|