What browsers do to an SVG drawn as an image
Every converter that runs in a browser draws the SVG as an image, and an image may not run scripts or load other files. That rule is the same everywhere; what each engine does about it is not. Each row was measured in Chromium and WebKit on 8 October 2026.
| In the SVG | Chromium (Chrome, Edge) | WebKit (Safari) |
|---|---|---|
| A Google Font loaded with @import | Dropped: same pixels as a font name that does not exist | Dropped, the same |
| A font embedded as a data: URL | Used | Used |
| An <image> at a full URL | Paints its broken-image icon; no request is made | Leaves a hole |
| An <image> at a relative path | Leaves a hole | Leaves a hole |
| fill="currentColor" | Black | Black |
| No xmlns attribute | Draws nothing | Draws nothing |
| width="210mm" | 794 px | 793 px |
| A viewBox and no width or height | 300 px wide | 300 px wide |
| <foreignObject> | Draws, then refuses to export | Draws, then refuses to export |
| ppi in the PNG it encodes | None (no pHYs chunk) | None (no pHYs chunk) |
The broken-image icon is the one to watch for. A converter built on Chromium does not leave a gap where a linked photo was; it paints a small grey picture-frame icon into your PNG, and no request for the photo is ever made.
Pixels, ppi and the size it prints at
A PNG is a grid of pixels. How large it prints depends on a separate number, the pixels per inch stored in its pHYs chunk. Browsers write none, so print and layout apps assume one: Photoshop 72, and most Microsoft apps 96. A file made for 300 ppi then comes out three or four times too large.
Choose Print size and the arithmetic is done for you: 90 mm at 300 ppi is 90 ÷ 25.4 × 300 = 1,063 pixels, and the file says 300 ppi (stored as 11,811 pixels per metre). In the other modes, Auto writes 96 ppi for each 1× of scale, so a 2× export of a 24 px icon is 48 px at 192 ppi and still lays out at 24 px wide.
For screen sizes in other units, the pixel converter does the same arithmetic for inches, centimetres and points. If the SVG itself needs to be smaller first, run it through the SVG optimiser and drop the result here.