mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-29 12:17:14 -06:00
57 lines
2.9 KiB
Rust
57 lines
2.9 KiB
Rust
//! Object → Flatten Transparency: transparent art becomes opaque art that looks the same.
|
|
//!
|
|
//! The targets (`ids` or the selection) split into groups of overlapping objects. Groups without
|
|
//! transparency stay as they are (their type and strokes are outlined on request). The others are
|
|
//! cut into atomic regions: the faces of the planar arrangement of every fill, outlined stroke and
|
|
//! clipping path in them ([`po::regions`]). The same paints cover each whole region, so its colour
|
|
//! is exact: those paints composited as the renderer composites them ([`Composer`], blend modes by
|
|
//! [`composite`]), over white (or over nothing with Preserve Alpha); in CMYK documents their inks
|
|
//! composite, plane by plane ([`cmyk_planes`]), and the colour is CMYK. Each region becomes a path
|
|
//! filled with that flat colour. Where gradients, patterns, images, opacity masks or raster
|
|
//! effects reach there is no single colour: those regions are rendered into one image per group,
|
|
//! clipped to them with Clip Complex Regions (else the image is a rectangle that takes in the
|
|
//! regions it overlaps). The raster/vector balance rasterizes whole groups that split into more
|
|
//! regions than it allows (all of them at 0). For files without transparency (PDF/X-1a, PDF/X-3)
|
|
//! a CMYK document's images are opaque CMYK: its colours keep their inks there too.
|
|
//!
|
|
//! Edit → Transparency Flattener Presets: the built-in presets plus the user's, saved with the
|
|
//! preferences ([`crate::Prefs::flattener_presets`]); a `preset` named anywhere options are taken
|
|
//! finds both.
|
|
//!
|
|
//! Window → Flattener Preview: the same plan, worked out without rendering, reports what flattening
|
|
//! the document would touch ([`FlattenReport`], `flattener.preview`).
|
|
|
|
use std::collections::BTreeSet;
|
|
use std::sync::Arc;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_json::{Value, json};
|
|
use vectorcraft_color::blend::{cmyk_planes, composite, planes_cmyk};
|
|
use vectorcraft_color::{BlendMode, Color, Paint};
|
|
use vectorcraft_doc::appearance::{AppearanceItem, FillLayer};
|
|
use vectorcraft_doc::cmyk::Inks;
|
|
use vectorcraft_doc::{Appearance, ColorMode, Document, Effect, ImageBlob, ImageObject, Knockout, Node, NodeId, NodeKind};
|
|
use vectorcraft_geom::{Affine, FillRule, PathData, Rect, shapes};
|
|
use vectorcraft_pathops as po;
|
|
use vectorcraft_render::effects;
|
|
|
|
use super::edit::roots_of;
|
|
use super::menucmds::{MAX_PIXELS, isolated_doc, unique_key};
|
|
use super::pathops::{node_path, outline_strokes, outline_strokes_under, separate, shape_node};
|
|
use super::{CommandSpec, EngineError, Result, Session, always, bad, bool_or, cmd, has_doc, str_param, targets, unique_name};
|
|
|
|
mod analysis;
|
|
mod apply;
|
|
mod commands;
|
|
mod compose;
|
|
mod options;
|
|
mod presets;
|
|
mod report;
|
|
|
|
pub(crate) use analysis::see_through_images;
|
|
pub(crate) use apply::flatten_document;
|
|
pub use commands::specs;
|
|
pub use options::FlattenOptions;
|
|
pub use presets::{FlattenerPreset, PRESET_EXTS, PRESET_FORMAT};
|
|
pub use report::{FlattenReport, Highlight, Overprints, report};
|