On 2/10/11 00:14, Florian Berger wrote:
I have an issue with unwanted / inferior looking interpolation in scaled Inkscape PNG exports.
In the case at hand I have a pixel art image that has been converted to SVG using 40px x 40px vector squares for each pixel (whether or not Inkscape is the right tool for playing with pixel art is *not* the question here ;-) ).
When such an image is scaled down a little and exported as PNG, it
Please clarify: do you actually scale the vector objects and then export at 90 dpi (Inkscape's internal resolution), or do you refer to exporting to bitmap with various bitmap sizes, while keeping the SVG at the original size (rectangular paths with integer pixel values for all nodes / rectangle coords and dimensions)?
shows some poor interpolation artefacts. These artefacts are less obvious or not present in the actual Inkscape display, but very visible after export.
Here is an illustriation of the problem:
http://img594.imageshack.us/img594/769/inkscapeinterpolation.png
I don't see any interpolation artifacts - I do see antialiasing where the "vector pixels" (40x40px) do not fall on pixel grid lines in the exported PNG.
Comments below are based on the assumption that you "scaled" the drawing when exporting to bitmap (not the vector squares themselves on-canvas):
Recreating the drawing based on the screenshot, and testing with 0.48.2 and a current build from trunk gives the same (expected) results if exported at arbitrary bitmap sizes (or resolutions) without considering the pixel grid in the exported bitmap.
It would be interesting though to have a closer look at the SVG file used for your screenshots/export: I'm surprised that the screenshot doesn't show the same antialiasing artifacts where the vector squares touch: did you draw them slightly overlapping (e.g. with an additional stroke (colored like the fill)?
If the vector pixel are placed precisely to touch at the edges (without overlapping strokes, even the new renderer (trunk) does show the "light grey" edges (see attached screenshot) between them at most zoom levels.
(Please view at original size first to prevent additional interpolation.)
Please note that some of these interpolations do not seem to make sense, e.g. using bright grey in the brown / dark red hair of the character.
AFAIU the "bright grey" (lines) are antialiased edges of the vector squares (against the transparent background), not interpolation errors.
I am very aware that Inkscape may not be the weapon of choice for this kind of operation. Still, my questions:
- Is there any way to prevent Inkscape from interpolation / anti-aliasing upon exporting such an image?
Yes: export at bitmap sizes (or resolutions) where you know that the downscaled "vector pixels" fall precisely on pixel grid lines in the exported PNG.
Assuming 40x40px for each "vector pixel", and a total of 33 columns and 17 rows (-> page size of 1320x680 px), do export e.g. at 4.5dpi, 9dpi, 18dpi, 22.5dpi, ... and the exported PNG will _not_ have any noticeable anti-aliasing effects.
Alternatively, use dimensions which are dividable by the number of rows and columns of "vector pixels" in the drawing: assuming the page size has a width of 33 x 40 px = 1320 px a height of 17 x 40 px = 680 px export to bitmap sizes of e.g. 66x34, 132x68, 264x136, 330x170 ...
- If this is an interpolation issue: why does Inkscape use such inappropriate colors?
In my understanding it is not an interpolation issue - it is about antialiasing (against a transparent background). Inkscape does not have an option to turn off antialiasing when exporting to bitmap (nor when rendering on-canvas) - and yes, this feature has been requested various times in the bug tracker. But if you want "pixelized" art, you have to make sure yourself that all edges of the "vector pixels" in your drawing will match a pixel grid line in the exported bitmap (else your squares might not be squares any more (if inkscape had an option to turn off antialiasing), or get antialiased (blurry)).
hth, ~suv
Attached: - SVG file with pixel art redrawn based on the screenshot (vector squares 40x40 px, page size 1320x680 px): visible layer: adjacent squares have been unioned hidden layer: all individual squares (no unions) - exported to bitmap with 4.5, 9, 18 and 22.5 dpi (corresponds to bitmap sizes 66x34, 132x68, 264x156, 330x170 ...) - screenshot of the SVG file in Inkscape 0.48.2