What does the HEIC to PNG Converter do?
The HEIC to PNG Converter transforms Apple High Efficiency Image Container (.heic) and High Efficiency Image Format (.heif) camera photos into universal, lossless Portable Network Graphics (PNG) images with custom resolution scaling and dimension overrides.
HEIC is the default photo format on modern iPhones and iPads (iOS 11+). While it provides high compression efficiency, HEIC photos cannot be viewed on older Windows PCs, Android devices, legacy browsers, or uploaded directly to many websites. Converting HEIC to PNG ensures 100% universal compatibility across all operating systems, web browsers, and graphic software.
Core Concepts
- Apple HEIC & HEIF ISOBMFF Box Parsing: Inspects
ftyp,meta, andispe(Image Spatial Extents) container boxes to extract native pixel dimensions. - Universal Container Translation: Transforms next-generation Apple camera photos into standard PNG files compatible with all platforms.
- Resolution Scaling (@2x / @3x / @4x): Upscales or downsamples high-megapixel mobile photography into high-density raster canvases.
- Data URI & Code Snippet Generation: Generates copy-ready Base64 Data URIs, HTML tags, and CSS background rules.
How to use the tool?
- Upload HEIC Photo or Paste Base64: Drag and drop a
.heicor.heiffile into the dedicated drop zone, or paste a Base64 HEIC string into the editor. - Select Resolution Scale: Choose
1x (Original Size),2x (@2x Retina HD),3x (@3x Ultra), or4x (@4x Print Quality). - Optional Dimension Overrides: Set custom pixel
WidthorHeightoverrides if resizing is needed. - Convert to PNG: Click Convert to PNG to execute conversion.
- Download or Copy: Click Download to save your
.pngfile or Copy the Base64 Data URI.
Related Developer Utilities
- AVIF to PNG Converter — Convert next-generation AVIF images to PNG.
- WebP to PNG Converter — Convert modern WebP graphics to PNG.
- JPG to PNG Converter — Convert JPG photos to lossless PNG images.
- TIFF to PNG Converter — Convert uncompressed TIFF scans to PNG.
REST API Integration
blueutils.com provides a free REST API endpoint (POST https://blueutils.com/api/image/heic-to-png) for programmatic validation, ISOBMFF dimension parsing, and PNG Data URI formatting.
API Request Parameters
| Name | Type | Description | Example |
|---|---|---|---|
rawText |
String | Raw Base64 string or Data URI of the HEIC image. | "data:image/heic;base64,AAAAIGZ0..." |
options.scale |
Number | Multiplier scale factor (1, 2, 3, 4). Default is 1. |
2 |
options.width |
Number | Optional target width in pixels. | 1920 |
options.height |
Number | Optional target height in pixels. | 1080 |
API Request Payload Examples
cURL
curl -X POST https://blueutils.com/api/image/heic-to-png \
-H "Content-Type: application/json" \
-d '{
"rawText": "data:image/heic;base64,AAAAIGZ0eXBoZWljAAAAAG1pZjFoZWljAAAAOG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QAAAAAAAAAAAAAAAAAAAAAAADHaXBycAAAABNjb2xybmNseAAAAAEABAAHAAAAAmlzcGUAAAAAAAAAAQAAAAEAAAAAYXNzZQAAABhpcG1hAAAAAAAAAAEAAQQEAAAEAA==",
"options": {
"scale": 1
}
}'Python
import requests
url = "https://blueutils.com/api/image/heic-to-png"
payload = {
"rawText": "data:image/heic;base64,AAAAIGZ0eXBoZWljAAAAAG1pZjFoZWljAAAAOG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QAAAAAAAAAAAAAAAAAAAAAAADHaXBycAAAABNjb2xybmNseAAAAAEABAAHAAAAAmlzcGUAAAAAAAAAAQAAAAEAAAAAYXNzZQAAABhpcG1hAAAAAAAAAAEAAQQEAAAEAA==",
"options": {
"scale": 1
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.json())Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String jsonPayload = """
{
"rawText": "data:image/heic;base64,AAAAIGZ0eXBoZWljAAAAAG1pZjFoZWljAAAAOG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QAAAAAAAAAAAAAAAAAAAAAAADHaXBycAAAABNjb2xybmNseAAAAAEABAAHAAAAAmlzcGUAAAAAAAAAAQAAAAEAAAAAYXNzZQAAABhpcG1hAAAAAAAAAAEAAQQEAAAEAA==",
"options": {
"scale": 1
}
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://blueutils.com/api/image/heic-to-png"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}API Response Parameters
| Name | Type | Description | Example |
|---|---|---|---|
isValid |
Boolean | Indicates whether the HEIC was parsed successfully. | true |
mimeType |
String | Target output MIME type (image/png). |
"image/png" |
originalFormat |
String | Detected input MIME type (image/heic). |
"image/heic" |
dataUri |
String | Base64 PNG Data URI string. | "data:image/png;base64,..." |
metadata.originalWidth |
Number | Original width in pixels extracted from ispe box. |
4032 |
metadata.originalHeight |
Number | Original height in pixels extracted from ispe box. |
3024 |
metadata.targetWidth |
Number | Scaled target pixel width. | 4032 |
metadata.targetHeight |
Number | Scaled target pixel height. | 3024 |
metadata.scale |
Number | Scale factor applied. | 1 |
metadata.majorBrand |
String | Detected ISOBMFF major brand (heic, mif1). |
"heic" |
snippets.html |
String | Ready-to-use HTML <img> tag. |
"<img src=\"...\" />" |
snippets.css |
String | Ready-to-use CSS background-image declaration. |
"background-image: url(\"...\");" |
API Response Payload Examples
Success Response (HTTP 200 OK)
{
"isValid": true,
"mimeType": "image/png",
"originalFormat": "image/heic",
"dataUri": "data:image/png;base64,AAAAIGZ0...",
"base64": "AAAAIGZ0...",
"metadata": {
"originalWidth": 4032,
"originalHeight": 3024,
"targetWidth": 4032,
"targetHeight": 3024,
"scale": 1,
"majorBrand": "heic",
"aspectRatio": 1.3333,
"originalSizeBytes": 1824000,
"formattedSize": "1781.3 KB"
},
"snippets": {
"html": "<img src=\"data:image/png;base64,...\" width=\"4032\" height=\"3024\" alt=\"Converted PNG Image\" />",
"css": "background-image: url(\"data:image/png;base64,...\");",
"markdown": ""
}
}Validation Failure Response (HTTP 400 Bad Request)
{
"isValid": false,
"error": "Invalid format: Expected a valid HEIC/HEIF image (ftyp/heic container or data:image/heic)."
}Rate Limit Exceeded Response (HTTP 429 Too Many Requests)
{
"error": "API rate limit exceeded. Please wait or contact support@blueutils.com."
}Why use an API to convert HEIC to PNG?
Automating HEIC conversion via API in build workflows and upload pipelines offers major benefits:
- Universal User Upload Pipeline: Allow iOS users to upload iPhone camera HEIC photos without worrying about cross-platform rendering failures.
- Optimized Token Efficiency for AI Agents: Extracts clean image dimensions and brand metadata before sending image data to multimodal vision agents.
- Deterministic Pipeline Integration: Enables automated CI/CD release scripts to generate universal PNG fallbacks.
Native Usage
How to convert HEIC to PNG locally using command-line tools:
Windows (CMD / PowerShell)
# PowerShell: Convert HEIC to PNG using ImageMagick
magick "photo.heic" "photo.png"Linux / Unix (Bash / Shell)
# Bash: Convert HEIC to PNG using libheif (heif-convert)
heif-convert photo.heic photo.png
# Or using ImageMagick:
magick photo.heic photo.pngPython
# Python using pillow-heif and Pillow
from PIL import Image
from pillow_heif import register_heif_opener
register_heif_opener()
image = Image.open('photo.heic')
image.save('photo.png', 'PNG')
print("Converted photo.heic to photo.png successfully")Java
// Java using ImageIO (with TwelveMonkeys or JDeli HEIC plugin)
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class HeicToPng {
public static void main(String[] args) throws Exception {
BufferedImage inputImage = ImageIO.read(new File("photo.heic"));
ImageIO.write(inputImage, "png", new File("photo.png"));
System.out.println("Converted photo.heic to photo.png successfully");
}
}