Skip to main content

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:

  1. Open the converter in a modern browser
  2. Drag and drop HEIC files or click to select
  3. Adjust quality and format settings if needed
  4. Download converted JPG files

For Developers:

  1. Include the converter as an iframe or PWA
  2. Use our JavaScript API for custom integration
  3. Configure settings via URL parameters
  4. 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

BrowserMinimum VersionWebAssemblyWeb WorkersStatus
Chrome67+✅ Full✅ Full✅ Recommended
Firefox60+✅ Full✅ Full✅ Supported
Safari14+✅ Full✅ Full✅ Supported
Edge79+✅ 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
ParameterTypeDefaultDescription
qualitynumber85Output quality (20-100)
formatstringjpgOutput format (jpg, webp)
resizenumber100Resize percentage (25-100)
preserveExifbooleanfalseKeep 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>
&lt;html&gt;
<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>
&lt;/html&gt;

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;