printpdf icon indicating copy to clipboard operation
printpdf copied to clipboard

replace color_space field in `ImageXObject` with `color_type` field

Open anhtumai opened this issue 3 years ago • 2 comments

ColorSpace is just a simplified version of ColorType and is not used much in this library codebase.

image

Replacing it with the color_type field in ImageXObject will give library users more information, in case they want to do some transformation with the field image_data.

For example, some people reported that adding an image with the Alpha channel will result in a blank page (#84, #119). This can be resolved by removing the alpha channel from ImageXObject::image_data (check this comment: https://github.com/fschutt/printpdf/issues/119#issuecomment-1120434233). However, for different color_type, image_data will have different formats. For ColorType::Rgba8, image_data will have format: [Red1, Green1, Blue1, Alpha1, ..., RedN, Green2, Blue2; AlphaN]. But for ColorType::Rgba16, the format will be [Red1a, Red1b, Green1a, Green1b, Blue1a, Blue1b, Alpha1a, Alpha1b, ...]. Source: https://github.com/image-rs/image/issues/1711#issuecomment-1120450753

anhtumai avatar May 08 '22 19:05 anhtumai

@fschutt btw, do you plan to rewrite this library to not use lopdf? To me, lopdf lacks good documentation, which can be an obstacle for people to contribute.

anhtumai avatar Nov 03 '22 21:11 anhtumai

No, I don't think I'll switch from lopdf as it's still a pretty good crate.

The reason I wanted my own ColorType is because PDF doesn't support all color types that the image crate supports, the image crate also changes a lot and I don't want to break the API.

fschutt avatar Feb 28 '23 16:02 fschutt

I think this can be closed, not relevant anymore. The API has changed to RawImage::from_bytes([u8]), it will auto-detect the color type and image type based on the crates enabled features (i.e. png, jpeg, bmp and so on). So this isn't relevant anymore.

fschutt avatar Mar 08 '25 22:03 fschutt