Fix downscaled raster export filtering#516
Merged
Merged
Conversation
This was referenced May 12, 2026
This was referenced May 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Summary: Fix Downscaled Raster Export Filtering
Summary
Fixes raster image export at very small scales, where filter effects such as
feMorphologycould disappear because the SVG picture was rendered directly into the final low-resolution target.The raster export path now renders downscaled images through a bounded higher-resolution intermediate surface and then downsamples to the requested output size. This preserves subpixel filtered detail while avoiding unbounded memory use for very large SVG documents.
Problem
Issue #246 reported that an SVG rendered with
Svg.Saveat a small target size lost the white inside stroke produced by a filter usingfeMorphology radius="8".The affected export scale was approximately
38 / 609. Rendering directly at that scale made the morphology kernel too small in the target raster, so the filter output was effectively lost.Changes
SKPictureExtensions.ToBitmap.SKPictureExtensions.ToImage.SKBlendMode.Srcwhen drawing the intermediate image into the target, so translucent backgrounds are copied exactly instead of being composited twice.Tests
Added focused
SKSvgTestscoverage for:Validation
Commands run locally:
Results:
SKSvgTests: 10 passed.git diff --check: clean.Commits
fc71bdf2bFix downscaled raster export filtering1f00bc87dAdd downscaled export regressions