Technical Documentation
Want to embed our converter in your app? Need to understand how it works under the hood? Here's all the technical stuff.
🚀 Getting Started
Quick Start Guide
Our HEIC to JPG converter runs entirely in the browser using WebAssembly. No server uploads, no API keys, no installation required.
For End Users:
- Open the converter in a modern browser
- Drag and drop HEIC files or click to select
- Adjust quality and format settings if needed
- Download converted JPG files
For Developers:
- Include the converter as an iframe or PWA
- Use our JavaScript API for custom integration
- Configure settings via URL parameters
- Handle conversion events programmatically
🏗️ Architecture Overview
Browser Frontend
React/Next.js interface with drag-and-drop file handling
WebAssembly Core
libheif and @squoosh/lib compiled to WASM for high performance
Web Workers
Background processing to keep UI responsive during conversion
🌐 Browser Support
Compatibility Matrix
Browser | Minimum Version | WebAssembly | Web Workers | Status |
---|---|---|---|---|
Chrome | 67+ | ✅ Full | ✅ Full | ✅ Recommended |
Firefox | 60+ | ✅ Full | ✅ Full | ✅ Supported |
Safari | 14+ | ✅ Full | ✅ Full | ✅ Supported |
Edge | 79+ | ✅ Full | ✅ Full | ✅ Supported |
IE 11 | - | ❌ None | ⚠️ Limited | ❌ Not Supported |
📱 Mobile Support
iOS Safari 14+, Chrome Mobile 67+, and Firefox Mobile 60+ are fully supported. Performance may vary based on device memory and processing power.
🔧 API Reference
URL Parameters
Configure the converter behavior by adding parameters to the URL:
https://heictojpg.com/?quality=85&format=jpg&preserveExif=false
Parameter | Type | Default | Description |
---|---|---|---|
quality | number | 85 | Output quality (20-100) |
format | string | jpg | Output format (jpg, webp) |
resize | number | 100 | Resize percentage (25-100) |
preserveExif | boolean | false | Keep EXIF metadata |
JavaScript Integration
Embed the converter in your own application:
// Iframe integration <iframe src="https://heictojpg.com/?quality=90&embed=true" width="100%" height="600" frameborder="0"> </iframe> // PostMessage API for communication window.addEventListener('message', (event) => { if (event.origin === 'https://heictojpg.com') { const { type, data } = event.data; if (type === 'CONVERSION_COMPLETE') { console.log('Files converted:', data.files); } } });
⚙️ Configuration Options
🎯 Quality Settings
Recommended Values:
- 95-100%: Professional/print quality
- 85-94%: High quality for most uses
- 75-84%: Good quality for web
- 60-74%: Moderate quality, smaller files
- 20-59%: Low quality for thumbnails
📄 Output Formats
Supported Formats:
- JPG/JPEG: Universal compatibility
- WebP: Modern format with better compression
Format Selection Guide:
- • JPG for maximum compatibility
- • WebP for smaller file sizes
🚀 Advanced Usage
📦 Batch Processing Optimization
Performance Tips:
- Process 10-20 files at a time for optimal performance
- Close other browser tabs to free memory
- Use lower quality settings for large batches
- Monitor browser memory usage in DevTools
Memory Management:
- Clear completed conversions regularly
- Refresh browser for very large batches
- Use devices with 8GB+ RAM for best results
- Enable hardware acceleration in browser
📸 EXIF Data Handling
Privacy Note: By default, we remove all EXIF data including GPS location information to protect your privacy. Enable "Preserve EXIF" only if you specifically need the metadata.
Removed by Default:
- GPS coordinates and location data
- Camera make and model
- Shooting parameters (ISO, aperture, etc.)
- Software and processing information
- Timestamps and creation dates
When to Preserve EXIF:
- Professional photography workflows
- Photo organization and cataloging
- Forensic or legal documentation
- Technical analysis requirements
💻 Code Examples
Basic Integration
<!DOCTYPE html> <html> <head> <title>HEIC Converter Integration</title> </head> <body> <h1>My Photo App</h1> <!-- Embed the converter --> <iframe id="heic-converter" src="https://heictojpg.com/?quality=90&embed=true" width="100%" height="600" frameborder="0" allow="camera; microphone"> </iframe> <script> // Listen for conversion events window.addEventListener('message', function(event) { if (event.origin === 'https://heictojpg.com') { console.log('Converter event:', event.data); } }); </script> </body> </html>
React Component Integration
import React, { useEffect, useRef } from 'react'; const HEICConverter = ({ onConversionComplete }) => { const iframeRef = useRef(null); useEffect(() => { const handleMessage = (event) => { if (event.origin === 'https://heictojpg.com') { const { type, data } = event.data; if (type === 'CONVERSION_COMPLETE') { onConversionComplete(data.files); } } }; window.addEventListener('message', handleMessage); return () => window.removeEventListener('message', handleMessage); }, [onConversionComplete]); return ( <iframe ref={iframeRef} src="https://heictojpg.com/?quality=85&format=jpg&embed=true" width="100%" height="600" frameBorder="0" title="HEIC to JPG Converter" /> ); }; export default HEICConverter;