SVG to PNG: Convert Vector to Raster (Without Losing Quality)
SVG and PNG are different beasts. Here's when to convert, when to keep SVG, and how to do it properly.
SVG to PNG: The Complete Guide
SVG and PNG are fundamentally different. Converting between them requires understanding what you're losing.
SVG vs PNG
SVG (Vector)
Scalable Vector Graphics
- Resolution-independent
- Infinite scaling
- Small file size for simple graphics
- Editable in code
- Can animate
Best for: Logos, icons, diagrams, fonts
PNG (Raster)
Portable Network Graphics
- Fixed resolution
- Pixel-based
- Larger file size
- Not editable
- No animation
Best for: Photos, screenshots, complex graphics
When to Convert SVG to PNG
✓ Good Reasons
1. Browser support issues Some older browsers don't fully support SVG.
2. Email clients Most email clients don't support SVG. PNG or JPG only.
3. Social media Some platforms don't accept SVG uploads.
4. Simple compatibility When you need the image to work everywhere.
✗ Bad Reasons
1. "It will look better" SVG at 100% scale looks identical to PNG.
2. "I need higher resolution" SVG scales infinitely. PNG is fixed.
3. "PNG is smaller" For simple graphics, SVG is often smaller.
How to Convert
Method 1: Online Tools
Imagic AI
Upload SVG, set PNG size, download.
Pros:
- Easy
- No install
- Free
Method 2: Command Line
Inkscape (Linux/Mac)
# Install
sudo apt-get install inkscape # Linux
brew install inkscape # Mac
# Convert
inkscape input.svg -w 1024 -h 1024 -o output.png
ImageMagick
# Install
sudo apt-get install imagemagick
# Convert
convert -background none input.svg -resize 1024x1024 output.png
Method 3: Python
# Install cairosvg
# pip install cairosvg pillow
import cairosvg
def svg_to_png(input_svg, output_png, width=1024, height=1024):
"""Convert SVG to PNG."""
cairosvg.svg2png(
url=input_svg,
write_to=output_png,
output_width=width,
output_height=height
)
print(f"✓ Converted: {input_svg} → {output_png}")
# Usage
svg_to_png('logo.svg', 'logo.png', width=512, height=512)
Method 4: Browser
CloudConvert
- Go to cloudconvert.com
- Upload SVG
- Select PNG output
- Set dimensions
- Convert
The Size Problem
When to Use What Resolution
| Use Case | PNG Size |
|---|---|
| Favicon | 32×32px |
| Icon | 64×64px |
| Small graphic | 128×128px |
| Medium | 256×256px |
| Large | 512×512px |
| 1024×1024px+ |
Batch Conversion
import cairosvg
from pathlib import Path
def batch_svg_to_png(input_dir, output_dir, width=512, height=512):
"""Batch convert SVG to PNG."""
input_path = Path(input_dir)
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
svg_files = list(input_path.glob('*.svg'))
print(f"Converting {len(svg_files)} SVG files...")
for svg in svg_files:
output = output_path / f"{svg.stem}.png"
cairosvg.svg2png(
url=str(svg),
write_to=str(output),
output_width=width,
output_height=height
)
print(f"✓ {svg.name} → {output.name}")
# Usage
batch_svg_to_png('./svg_files', './png_files', width=512, height=512)
Common Issues
Issue: Transparency Not Working
Cause: SVG has white background baked in.
Fix:
# Ensure transparent background
cairosvg.svg2png(
url='input.svg',
write_to='output.png',
background_color=None # Transparent
)
Issue: Wrong Size
Cause: SVG viewBox vs width/height.
Fix:
# Read SVG dimensions first
from xml.etree import ElementTree as ET
def get_svg_size(svg_path):
tree = ET.parse(svg_path)
root = tree.getroot()
# Get viewBox
viewbox = root.get('viewBox')
if viewbox:
parts = viewbox.split()
width = float(parts[2])
height = float(parts[3])
return width, height
# Fallback to width/height attributes
width = float(root.get('width', 100))
height = float(root.get('height', 100))
return width, height
w, h = get_svg_size('logo.svg')
print(f"SVG size: {w}x{h}")
Issue: Text Rendering
Cause: Fonts not embedded in SVG.
Fix: Convert text to paths before export, or embed fonts.
SVG Optimization
Before converting, optimize SVG:
# Install svgo
npm install -g svgo
# Optimize SVG
svgo input.svg -o output.svg
This removes unnecessary metadata and simplifies paths.
When to Keep SVG
Keep SVG If:
- Web use: All modern browsers support SVG
- Scalability matters: You need various sizes
- File size matters: Simple graphics are smaller as SVG
- Editing needed: SVG is editable code
Convert to PNG If:
- Email: Most clients don't support SVG
- Legacy support: Older browser support needed
- Platform requirements: Some platforms only accept PNG
- Simplicity: Someone needs a simple image file
Quick Decision
Why do you need PNG?
│
├─ Email → Convert to PNG
├─ Social media → Check platform (most accept SVG now)
├─ Web → Keep SVG
├─ Print → Convert to PNG at high res
└─ Legacy support → Convert to PNG
FAQ
Q: Does SVG to PNG lose quality?
A: No, SVG is vector. PNG is raster. You're not losing quality, you're choosing a format.
Q: What resolution for PNG?
A: Depends on use. 512×512 for icons, 1024+ for large graphics.
Q: Can PNG become SVG?
A: No. Raster to vector conversion is complex and imperfect. Use SVG from the start.
Q: What's better: SVG or PNG?
A: Depends. SVG for web/icons/graphics. PNG for photos/legacy support.
The Bottom Line
- Keep SVG when possible. It's scalable and smaller.
- Convert when needed. Email, legacy support, specific platforms.
- Choose right resolution. Match to use case.
- Handle transparency. Ensure transparent background.
- Optimize first. Clean SVG converts better.
Try These
- Imagic AI - Quick conversion
- CloudConvert - Full format support
- SVGO - SVG optimization
Converted 1,000+ SVGs. Questions? Ask below.