since: 2.52

Declaration [src]

rsvg_handle_get_intrinsic_size_in_pixels (
  RsvgHandle* handle,
  gdouble* out_width,
  gdouble* out_height

Description [src]

Converts an SVG document’s intrinsic dimensions to pixels, and returns the result.

This function is able to extract the size in pixels from an SVG document if the document has both width and height attributes with physical units (px, in, cm, mm, pt, pc) or font-based units (em, ex). For physical units, the dimensions are normalized to pixels using the dots-per-inch (DPI) value set previously with rsvg_handle_set_dpi(). For font-based units, this function uses the computed value of the font-size property for the toplevel <svg> element. In those cases, this function returns TRUE.

For historical reasons, the default DPI is 90. Current CSS assumes a default DPI of 96, so you may want to set the DPI of a RsvgHandle immediately after creating it with rsvg_handle_set_dpi().

This function is not able to extract the size in pixels directly from the intrinsic dimensions of the SVG document if the width or height are in percentage units (or if they do not exist, in which case the SVG spec mandates that they default to 100%), as these require a viewport to be resolved to a final size. In this case, the function returns FALSE.

For example, the following document fragment has intrinsic dimensions that will resolve to 20x30 pixels.

<svg xmlns="" width="20" height="30"/>

Similarly, if the DPI is set to 96, this document will resolve to 192×288 pixels (i.e. 96×2 × 96×3).

<svg xmlns="" width="2in" height="3in"/>

The dimensions of the following documents cannot be resolved to pixels directly, and this function would return FALSE for them:

<!-- Needs a viewport against which to compute the percentages. -->
<svg xmlns="" width="100%" height="100%"/>

<!-- Does not have intrinsic width/height, just a 1:2 aspect ratio which
     needs to be fitted within a viewport. -->
<svg xmlns="" viewBox="0 0 100 200"/>

Instead of querying an SVG document’s size, applications are encouraged to render SVG documents to a size chosen by the application, by passing a suitably-sized viewport to rsvg_handle_render_document().

Available since: 2.52



Type: gdouble*

Will be set to the computed width; you should round this up to get integer pixels.

The argument will be set by the function.
The argument can be NULL.

Type: gdouble*

Will be set to the computed height; you should round this up to get integer pixels.

The argument will be set by the function.
The argument can be NULL.

Return value

Type: gboolean

TRUE if the dimensions could be converted directly to pixels; in this case out_width and out_height will be set accordingly. Note that the dimensions are floating-point numbers, so your application can know the exact size of an SVG document. To get integer dimensions, you should use ceil() to round up to the nearest integer (just using round(), may may chop off pixels with fractional coverage). If the dimensions cannot be converted to pixels, returns FALSE and puts 0.0 in both out_width and out_height.