Converter · No upload

SVG to JPG, privately

Drop in SVG drawings and download a JPG of each one, drawn by your browser at the size the file declares — or a multiple of it — at the quality you choose. Transparency is flattened onto white, because JPG has none. The conversion runs entirely inside your browser — nothing is uploaded, the network meter below proves it live, and it keeps working with your wifi switched off.

Statusidle Files OutputJPG Network since file read

A picture of the drawing, not vector shapes, at the scale you pick (1× by default) and quality 0.92; the row prints the pixels, and says when the scale was reduced or a source was animated (first frame only). Transparency is flattened onto white. A file that reaches outside itself is refused by name, naming the reference; so are a script, a <foreignObject>, a compressed SVG and one with no size. Takes .svg.

How this converter works

An SVG is a description of a drawing and a JPG is a grid of pixels with no transparency, so the conversion is a rendering rather than a translation. This page reads your file as text, takes the size the root element declares — width and height in any of the units the format allows, or the viewBox when those are absent — and writes that size back onto a copy as explicit pixel dimensions, because a browser asked to guess the size of an unsized SVG answers 300 × 150 and this page never lets that guess reach the output. The copy is handed to your browser's own SVG renderer as an in-memory image and drawn onto a canvas at the multiple you chose, over a white background painted first; drawing the image at its destination size re-renders the shapes at that size rather than stretching a small bitmap, which is why 4× is crisp rather than blurred. The canvas is then encoded to JPG at the quality on the dial, and the row prints the pixel size that came out. Nothing in that path touches the network: the file is already on your machine and this site has no server to send it to.

The best evidence for that is not our instrument but your browser's. Press F12, open the Network tab, leave it visible, and run a conversion. Nothing gets added to the list. That panel is written by the people who make your browser, it records what a page actually does rather than what a page claims, and no code of ours can quiet it. This converter has one refusal that exists to keep that panel honest: an SVG loaded as an image is not allowed to fetch, so a file that references an image, a font or a stylesheet outside itself — at a web address or on a file path — renders with a grey placeholder, a blank, or a substituted font and makes no request at all, which means the meter would read zero on a drawing that came out incomplete. Files like that are refused before anything is drawn, with the reference named on the row, and a file containing a script is refused the same way because nothing from your file is ever run. A file that embeds HTML in a foreignObject is refused for a different reason: the browser will not let this page read the pixels back from one. Compare notes with the methodology page, which sets out two further ways to catch us.

The honest limits: the JPG is a picture of your drawing, not the drawing. Shapes and text become pixels at the multiple you chose, so the output has one fixed size and does not scale further without softening — keep the SVG for anything that has to be re-rendered later. Transparency cannot survive the trip: JPG has no alpha channel, and a canvas encoded to it composites transparent pixels onto black, so this page paints white underneath first and the row says so. Where a drawing is mostly flat colour and hard edges — which most SVGs are — JPG shows its artifacts soonest, and SVG to PNG is the better target unless you specifically need a JPG. The quality dial applies to every file not yet encoded when it moves, so moving it while a batch is still running changes the rest of that batch. Text is drawn with the fonts installed on this device, so a font the file names but does not carry is substituted silently and the same file can come out differently elsewhere. Scripts never run, and an animated SVG is drawn at time zero, so it keeps only its first frame and the row says so — measured, a rect animating from red to blue came out red. A compressed .svgz is refused as what it is rather than decompressed, as is a file with no width, height or viewBox. A browser canvas has a pixel limit — 268,435,456 pixels and 32,767 to a side is what this page allows, measured in Chrome, which hands back nothing at all past its own limit rather than an error — so a large drawing at a high multiple is rendered at the largest scale that fits, with the row saying which, and one that does not fit at 1× is refused rather than saved blank.

Frequently asked questions

Is my SVG uploaded anywhere?
No. The file is read as text by this page, drawn by your browser's own SVG renderer inside this tab, and encoded to JPG here. The network meter above counts requests made after your file is read and it stays at zero — disconnect entirely and convert again if you want to see that for yourself.
What happens to transparency?
It is flattened onto white, and the row says so on every conversion. JPG has no alpha channel, so something has to go underneath a transparent drawing; a canvas encoded to JPG with nothing painted first composites onto black, which is almost never what anyone wants, so this page fills white before the drawing lands. If you need the transparency kept, use SVG to PNG instead — PNG carries an alpha channel and that page writes one.
What size will the JPG be?
The size the SVG declares, at 96 pixels per inch, multiplied by the scale you pick. A file with width and height in mm, cm, in, pt or pc is converted at that rate — a 210 × 297 mm drawing is 794 × 1123 pixels at 1× — and one sized in pixels or plain numbers is read as CSS pixels, so a 200 × 100 file gives a 200 × 100 JPG at 1× and an 800 × 400 one at 4×. A file with only a viewBox is sized from the viewBox, one user unit per pixel, and the row says that is what happened. Every row prints the pixel size that actually came out.
What quality setting should I use?
The dial runs from 0.5 to 1 and starts at 0.92. JPG saves space by discarding detail, and the kind of detail it discards first — hard edges between flat colours — is exactly what most SVG drawings are made of, so artifacts show up around lettering and line work sooner than they would on a photograph. Move the dial up if you can see fringing around edges; move it down only when the file has to be small. The dial applies to every file not yet encoded when it moves, so a batch already running takes the new value for the files it has not reached yet.
Why was my file refused?
Because it needed something this page will not do. An SVG that references anything outside itself — an image, font or stylesheet at a web address, on a relative or absolute path, or in another file, an @import in its stylesheet — is refused by name, because a browser rendering it as an image fetches none of those and paints a grey box, or nothing at all, where the picture should be, so the meter would read zero on a page that quietly came out incomplete. A link wrapped around a shape is not a reference of that kind and is left alone. A file containing a script element is refused for the same reason: nothing from your file is run. A file with a foreignObject element — HTML embedded in the SVG, which is how draw.io and diagrams.net exports carry their text labels — is refused because the browser will not let this page read the pixels back from one; export the labels as paths or plain SVG text first. A compressed SVG, gzip bytes under an .svg name, is refused rather than decompressed. A file with no width, height or viewBox is refused because it has no size, and one that is not well-formed XML because the browser cannot draw it.

Related tools