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;