किसी HEIC फ़ाइल को हेक्स एडिटर में खोलें। पहले बारह बाइट्स:
00 00 00 18 66 74 79 70 68 65 69 63
यह ISOBMFF है — वही कंटेनर मानक जो MP4 उपयोग करता है। 0x18 (24 बाइट्स) बॉक्स का आकार है, ftyp फ़ाइल प्रकार बॉक्स है, heic मेजर ब्रांड है। HEIC फ़ाइल कोई छवि एन्कोडिंग नहीं है। यह एक ब्रांड मार्कर वाला कंटेनर है, जिसके अंदर HEVC-एन्कोडेड छवियाँ हैं।
HEIC वास्तव में क्या है
HEIC = High Efficiency Image Container。 Apple की HEIF की ब्रांडेड कार्यान्वयन, MPEG द्वारा 2015 में ISO/IEC 23008-12 के रूप में मानकीकृत। JPEG एक संपीडन एल्गोरिदम और एक फ़ाइल प्रारूप दोनों है। HEIC केवल एक कंटेनर है। अंदरूनी संपीडन HEVC (H.265) है, वही कोडेक जो 4K वीडियो के लिए उपयोग किया जाता है।
एक HEIC फ़ाइल में संग्रहीत हो सकता है:
- एक प्राथमिक छवि
- कई वैकल्पिक छवियाँ (बर्स्ट शॉट्स)
- छवि अनुक्रम (Live Photos: स्थिर + 3-सेकंड का वीडियो)
- अल्फा चैनल और डेप्थ मैप्स
- प्रति चैनल 16-बिट रंग गहराई (JPEG 8-बिट तक सीमित है)
कंटेनर बॉक्स संरचना का उपयोग करता है — MP4 की तरह ही:
| Box | उद्देश्य |
|---|---|
ftyp | फ़ाइल प्रकार और संगत ब्रांड |
meta | आइटम मेटाडेटा और गुण |
mdat | कच्ची एन्कोडेड छवि डेटा (HEVC बिटस्ट्रीम) |
iloc | mdat के भीतर आइटम स्थान |
यही विस्तारशीलता HEIC को वे काम करने की अनुमति देती है जो JPEG कभी नहीं कर सकता था। इसे पार्स करने के लिए बॉक्स पदानुक्रम को समझने की आवश्यकता होती है, न कि केवल कच्ची बिटस्ट्रीम पढ़ने की।
Apple ने क्यों बदलाव किया
Apple ने HEIC का आविष्कार नहीं किया। MPEG ने 2015 में HEIF प्रकाशित किया। Apple ने इसे iOS 11 (2017) में iPhone के लिए डिफ़ॉल्ट कैमरा प्रारूप के रूप में अपनाया।
बदलाव गणितीय था, मार्केटिंग नहीं। iPhone की एक विशिष्ट 12MP फोटो JPEG में ~3.5 MB है। HEIC में, ~1.8 MB। 50 GB मुफ्त iCloud स्टोरेज टियर पर, यह अंतर लगभग 14,000 अतिरिक्त तस्वीरों का मतलब है। Apple स्टोरेज टियर बेचती है। हिसाब खुद ब खुद हो जाता है।
पारिस्थितिकी तंत्र का संरेखण भी था। Apple पहले ही वीडियो के लिए HEVC अपना चुकी थी (iOS 11 में H.265)। स्थिर छवियों के लिए उसी कोडेक का पुनः उपयोग करने का अर्थ था A-सीरीज़ चिप्स पर साझा हार्डवेयर डिकोड ब्लॉक, कम बिजली खपत और एकल लाइसेंसिंग पथ।
फायदे और नुकसान
HEIC लगभग हर मेट्रिक पर JPEG से बेहतर है, संगतता को छोड़कर।
| पहलू | HEIC | JPEG |
|---|---|---|
| संपीडन दक्षता | समान गुणवत्ता पर ~40–50% छोटा | बेसलाइन |
| रंग गहराई | 16-बिट तक | 8-बिट |
| पारदर्शिता | हाँ | नहीं |
| प्रति फ़ाइल कई छवियाँ | हाँ | नहीं |
| नॉन-डिस्ट्रक्टिव संपादन | हाँ | नहीं |
| Windows मूल समर्थन | HEIF एक्सटेंशन आवश्यक | सार्वभौमिक |
| वेब ब्राउज़र समर्थन | केवल Safari | सार्वभौमिक |
| Android समर्थन | 9+ पर मूल | सार्वभौमिक |
| पेटेंट लाइसेंसिंग | HEVC पेटेंट पूल | JPEG रॉयल्टी-मुक्त है |
HEVC कई पेटेंट पूल (MPEG LA, Access Advance) द्वारा कवर किया गया है। Apple iOS उपयोगकर्ताओं की ओर से शुल्क का भुगतान करती है। तीसरे पक्ष को यह लाभ नहीं मिलता। यह अनिश्चितता Apple पारिस्थितिकी तंत्र के बाहर अपनाने में रुकावट का एक बड़ा कारण है।
फ़ाइल हस्ताक्षर पढ़कर HEIC की पहचान
.heic एक्सटेंशन पर भरोसा न करें। पहले 32 बाइट्स पढ़ें और ftyp बॉक्स को पार्स करें।
वैध HEIC फ़ाइल हेडर का सटीक बाइट लेआउट:
Bytes 0–3: बॉक्स आकार (बिग-एंडियन uint32)
Bytes 4–7: बॉक्स प्रकार: "ftyp" (0x66 0x74 0x79 0x70)
Bytes 8–11: मेजर ब्रांड: "heic" या "heif" या "mif1"
Bytes 12–15: माइनर संस्करण (आमतौर पर 0x00000000)
Bytes 16+: संगत ब्रांड सूची (जैसे "mif1", "heic", "MiHE")
ब्राउज़र-साइड TypeScript:
async function isHeic(file: File): Promise<boolean> {
const buffer = await file.slice(0, 32).arrayBuffer()
const bytes = new Uint8Array(buffer)
if (String.fromCharCode(...bytes.slice(4, 8)) !== "ftyp") return false
const brand = String.fromCharCode(...bytes.slice(8, 12))
return ["heic", "heif", "mif1", "msf1"].includes(brand)
}
हमारा कनवर्टर डिकोडिंग का प्रयास करने से पहले यह जाँच करता है। गलत ब्रांड = तुरंत अस्वीकार। CPU बर्बाद नहीं होता।
Python
def is_heic(path: str) -> bool:
with open(path, "rb") as f:
header = f.read(32)
if len(header) < 12:
return False
if header[4:8].decode("ascii", errors="ignore") != "ftyp":
return False
return header[8:12].decode("ascii", errors="ignore") in {"heic", "heif", "mif1", "msf1"}
filetype के साथ उच्च-स्तरीय जाँच:
import filetype
kind = filetype.guess("photo.heic")
if kind and kind.extension in ("heic", "heif"):
print(kind.mime) # image/heic
या pillow-heif के साथ:
from pillow_heif import is_heif
if is_heif("photo.heic"):
# वैध कंटेनर
pass
Go
func isHeic(path string) bool {
f, err := os.Open(path)
if err != nil {
return false
}
defer f.Close()
buf := make([]byte, 32)
if _, err := f.Read(buf); err != nil {
return false
}
if string(buf[4:8]) != "ftyp" {
return false
}
brand := string(buf[8:12])
return brand == "heic" || brand == "heif" || brand == "mif1" || brand == "msf1"
}
PHP
function isHeic(string $path): bool {
$header = file_get_contents($path, false, null, 0, 32);
if (strlen($header) < 12) return false;
if (substr($header, 4, 4) !== 'ftyp') return false;
return in_array(substr($header, 8, 4), ['heic', 'heif', 'mif1', 'msf1'], true);
}
fileinfo के साथ:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file('photo.heic');
// image/heic या image/heif
ImageMagick CLI
ImageMagick 7+ libheif के साथ संकलित होने पर HEIC का समर्थन करता है:
magick identify -verbose photo.heic | grep "Format:"
# Format: HEIC (High Efficiency Image Container)
libheif के बिना: no decode delegate for this image format। अधिकांश Linux वितरणों पर, libheif-examples स्थापित करने से विकल्प के रूप में heif-convert मिलता है।
रूपांतरण पथ
यह जानना कि कोई फ़ाइल HEIC है, उसे खोलने की गारंटी नहीं देता। Windows को Microsoft Store से HEIF Image Extensions की आवश्यकता होती है। अधिकांश ब्राउज़र अभी भी <img> टैग में HEIC रेंडर करने से इनकार करते हैं। Android 9+ इसे मूल रूप से संभालता है; पुराने डिवाइस नहीं।
समाधान: रूपांतरित करें। हमारा HEIC से JPG कनवर्टर आपके ब्राउज़र में पूरी पाइपलाइन को संभालता है:
- फ़ाइलें ड्रॉप करें — एकल फोटो या पूरे फ़ोल्डर, बैच प्रोसेसिंग स्वचालित है।
- हस्ताक्षर सत्यापन — ऊपर दिखाया गया सटीक बाइट-रीडिंग लॉजिक हर फ़ाइल पर चलता है। गैर-HEIC फ़ाइलें तुरंत स्पष्ट संदेश के साथ अस्वीकार कर दी जाती हैं।
- क्लाइंट-साइड डिकोडिंग — libheif का WebAssembly बिल्ड स्थानीय रूप से चलता है। कोई अपलोड नहीं। कोई सर्वर नहीं।
- गुणवत्ता-संरक्षण आउटपुट — 90% गुणवत्ता वाला JPG मूल रिज़ॉल्यूशन और रंग सटीकता बनाए रखता है।
- बैच डाउनलोड — व्यक्तिगत फ़ाइलें या एकल ZIP संग्रह।
पारदर्शिता के साथ लॉसलेस आउटपुट के लिए: HEIC से PNG। वेब-अनुकूलित आकारों के लिए: HEIC से WebP।
आपकी फ़ाइलें कभी भी आपके डिवाइस को नहीं छोड़तीं। यही मुद्दा है।


