- From: Tavmjong Bah <tavmjong@free.fr>
- Date: Sat, 10 Jul 2010 17:46:43 +0200
- To: www-svg@w3.org
Hi, I've been trying to understand the feImage spec as Inkscape's rendering of a PNG via feImage is quite different from others. So I've trace through the spec all the relevant parts. Here is what I find: Filter effects region: filterUnits = userSpaceOnUse or objectBoundingBox (default) filter "hard clipped" to x, y, width height (default: -10%, -10%, 120%, 120%) primitiveUnits = userSpaceOnUse (default) or objectBoundingBox Filter effects subregion (filter primitive attribute) filter primitive "hard clipped" to x, y, width height (default: 0%, 0%, 100%, 100%) * First weirdness: the default is specified in percent, i.e. objectBoundingBox, but primitiveUnits default is userSpaceOnUse. Shouldn't the primitiveUnits default also be objectBoundingBox? Why is it different from the default of the filter effects region? (BTW, adding primitiveUnits = objectBoundingBox without adding x, y, width, and height breaks Batik.) feImage primitive Coordinate system depends on "primitiveUnits" Image is to be rendered according to the "image" element which specifies that an image is rendered by default so that it is centered in the specified viewport with at least two opposite sides touching the viewport sides. * Second weirdness: The coordinate system "depends on the value of attribute 'primitiveUnits'" which defaults to bounding box of the referenced object. As I read the spec it says that an image drawn via the feImage primitive should be drawn by default so that two opposite edges touch the bounding box (i.e. xMidYMid). This is what Inkscape does. However, Batik and other browsers draw the image so that two opposite edges touch the edges of the filter effects region. Inkscape's behavior makes more sense to me. The filter effects region is described as a way to limit CPU use in filter calculations. One would not expect the filter output to change depending on the filter effects region except for including or excluding area. This seems to be what the other filters primitives do (e.g. the feTurbulence filter pattern doesn't change when the filter effects region changes). There is a test at: http://tavmjong.free.fr/INKSCAPE/SVG_TESTS/Filters_Image1.svg I would expect the images to fit in the red rectangles. Am I missing something? Tav
Received on Saturday, 10 July 2010 15:47:19 UTC