diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-09-20 19:49:47 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-09-20 19:49:47 +0200 |
| commit | 3760748fddd3b793c79c370398a9d4a3fc5afc04 (patch) | |
| tree | b1a615e510aa231cfe9757a9c0a35a375e32e3ba /src/export | |
| parent | 757a701c1aa2a6fb80033c7e75666661818da6f9 (diff) | |
Refactor error handling
Diffstat (limited to 'src/export')
| -rw-r--r-- | src/export/pdf/image.rs | 16 | ||||
| -rw-r--r-- | src/export/render.rs | 7 |
2 files changed, 9 insertions, 14 deletions
diff --git a/src/export/pdf/image.rs b/src/export/pdf/image.rs index f148bb7d..e507a613 100644 --- a/src/export/pdf/image.rs +++ b/src/export/pdf/image.rs @@ -4,7 +4,7 @@ use image::{DynamicImage, GenericImageView, ImageResult, Rgba}; use pdf_writer::{Filter, Finish}; use super::{deflate, PdfContext, RefExt}; -use crate::image::{DecodedImage, ImageFormat}; +use crate::image::{DecodedImage, RasterFormat}; /// Embed all used images into the PDF. pub fn write_images(ctx: &mut PdfContext) { @@ -18,11 +18,9 @@ pub fn write_images(ctx: &mut PdfContext) { // Add the primary image. // TODO: Error if image could not be encoded. match image.decode().unwrap() { - DecodedImage::Raster(dynamic) => { + DecodedImage::Raster(dynamic, format) => { // TODO: Error if image could not be encoded. - let (data, filter, has_color) = - encode_image(image.format(), &dynamic).unwrap(); - + let (data, filter, has_color) = encode_image(format, &dynamic).unwrap(); let mut image = ctx.writer.image_xobject(image_ref, &data); image.filter(filter); image.width(width as i32); @@ -70,19 +68,19 @@ pub fn write_images(ctx: &mut PdfContext) { /// /// Skips the alpha channel as that's encoded separately. fn encode_image( - format: ImageFormat, + format: RasterFormat, dynamic: &DynamicImage, ) -> ImageResult<(Vec<u8>, Filter, bool)> { Ok(match (format, dynamic) { // 8-bit gray JPEG. - (ImageFormat::Jpg, DynamicImage::ImageLuma8(_)) => { + (RasterFormat::Jpg, DynamicImage::ImageLuma8(_)) => { let mut data = Cursor::new(vec![]); dynamic.write_to(&mut data, image::ImageFormat::Jpeg)?; (data.into_inner(), Filter::DctDecode, false) } // 8-bit RGB JPEG (CMYK JPEGs get converted to RGB earlier). - (ImageFormat::Jpg, DynamicImage::ImageRgb8(_)) => { + (RasterFormat::Jpg, DynamicImage::ImageRgb8(_)) => { let mut data = Cursor::new(vec![]); dynamic.write_to(&mut data, image::ImageFormat::Jpeg)?; (data.into_inner(), Filter::DctDecode, true) @@ -91,7 +89,7 @@ fn encode_image( // TODO: Encode flate streams with PNG-predictor? // 8-bit gray PNG. - (ImageFormat::Png, DynamicImage::ImageLuma8(luma)) => { + (RasterFormat::Png, DynamicImage::ImageLuma8(luma)) => { let data = deflate(luma.as_raw()); (data, Filter::FlateDecode, false) } diff --git a/src/export/render.rs b/src/export/render.rs index 3fb57ad6..e8702f34 100644 --- a/src/export/render.rs +++ b/src/export/render.rs @@ -188,10 +188,7 @@ fn render_bitmap_glyph( let size = text.size.to_f32(); let ppem = size * ts.sy; let raster = text.font.ttf().glyph_raster_image(id, ppem as u16)?; - let ext = match raster.format { - ttf_parser::RasterImageFormat::PNG => "png", - }; - let image = Image::new(raster.data.into(), ext).ok()?; + let image = Image::new(raster.data.into(), raster.format.into()).ok()?; // FIXME: Vertical alignment isn't quite right for Apple Color Emoji, // and maybe also for Noto Color Emoji. And: Is the size calculation @@ -342,7 +339,7 @@ fn render_image( let mut pixmap = sk::Pixmap::new(w, h)?; match image.decode().unwrap() { - DecodedImage::Raster(dynamic) => { + DecodedImage::Raster(dynamic, _) => { let downscale = w < image.width(); let filter = if downscale { FilterType::Lanczos3 |
