From ee2128d115f640a72f658540262e1028038a9381 Mon Sep 17 00:00:00 2001 From: frozolotl <44589151+frozolotl@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:03:25 +0100 Subject: [PATCH] Fix transparent text in PNG export (#3444) --- crates/typst-render/src/lib.rs | 29 +++++++---------------------- tests/ref/text/font.png | Bin 18319 -> 20573 bytes tests/typ/text/font.typ | 6 ++++++ 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/crates/typst-render/src/lib.rs b/crates/typst-render/src/lib.rs index 8c519795e..fa4a9bf18 100644 --- a/crates/typst-render/src/lib.rs +++ b/crates/typst-render/src/lib.rs @@ -465,12 +465,7 @@ fn render_outline_glyph( write_bitmap(canvas, &bitmap, &state, sampler)?; } Paint::Solid(color) => { - write_bitmap( - canvas, - &bitmap, - &state, - to_sk_color_u8_without_alpha(*color).premultiply(), - )?; + write_bitmap(canvas, &bitmap, &state, to_sk_color_u8(*color).premultiply())?; } Paint::Pattern(pattern) => { let pixmap = render_pattern_frame(&state, pattern); @@ -548,7 +543,8 @@ fn write_bitmap( let color = sampler.sample((x as _, y as _)); let color = bytemuck::cast(color); let pi = (y * cw + x) as usize; - if cov == 255 { + // Fast path if color is opaque. + if cov == u8::MAX && color & 0xFF == 0xFF { pixels[pi] = color; continue; } @@ -771,17 +767,6 @@ fn scaled_texture(image: &Image, w: u32, h: u32) -> Option> { trait PaintSampler: Copy { /// Sample the color at the `pos` in the pixmap. fn sample(self, pos: (u32, u32)) -> sk::PremultipliedColorU8; - - /// Write the sampler to a pixmap. - fn write_to_pixmap(self, canvas: &mut sk::Pixmap) { - let width = canvas.width(); - for x in 0..canvas.width() { - for y in 0..canvas.height() { - let color = self.sample((x, y)); - canvas.pixels_mut()[(y * width + x) as usize] = color; - } - } - } } impl PaintSampler for sk::PremultipliedColorU8 { @@ -835,7 +820,7 @@ impl PaintSampler for GradientSampler<'_> { self.transform_to_parent.map_point(&mut point); // Sample the gradient - to_sk_color_u8_without_alpha(self.gradient.sample_at( + to_sk_color_u8(self.gradient.sample_at( (point.x, point.y), (self.container_size.x.to_f32(), self.container_size.y.to_f32()), )) @@ -1027,9 +1012,9 @@ fn to_sk_color(color: Color) -> sk::Color { sk::Color::from_rgba8(r, g, b, a) } -fn to_sk_color_u8_without_alpha(color: Color) -> sk::ColorU8 { - let [r, g, b, _] = color.to_rgb().to_vec4_u8(); - sk::ColorU8::from_rgba(r, g, b, 255) +fn to_sk_color_u8(color: Color) -> sk::ColorU8 { + let [r, g, b, a] = color.to_rgb().to_vec4_u8(); + sk::ColorU8::from_rgba(r, g, b, a) } fn to_sk_line_cap(cap: LineCap) -> sk::LineCap { diff --git a/tests/ref/text/font.png b/tests/ref/text/font.png index d3893ce8f101029f2c4a614e5922f0155c10b0b8..39c8a951bd224ad29d359173baa3c295e3c86457 100644 GIT binary patch literal 20573 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 z