نحوه عملکرد حذف EXIF
یک فایل JPEG دنبالهای از بخشهای تگگذاریشده به نام APP markers است که بلافاصله پس از امضای دو بایتی SOI (0xFFD8) شروع میشوند. دادههای EXIF در APP1 قرار دارند، GPS بهعنوان یک sub-IFD داخل همان بلوک APP1 قرار دارد، و IPTC در APP13 قرار دارد. ابزار حذف هر marker را پیمایش میکند، موارد حامل متادیتا را شناسایی میکند، آنها را حذف میکند و payload باقیمانده را در یک JPEG معتبر دوباره مونتاژ میکند.
- تجزیه APP markers. ابزار ArrayBuffer خام را میخواند و دنباله marker JFIF را بایت به بایت پیمایش میکند. هر تگ marker دو بایتی نوع بخش را مشخص میکند: APP0 (سرآیند JFIF)، APP1 (EXIF و XMP)، APP13 (Photoshop و IPTC) و به همین ترتیب تا APP15. پارسر offset و طول بایت هر بخش را در یک جدول کوچک قبل از لمس کردن هر چیزی ثبت میکند، بنابراین buffer اصلی در حافظه دستنخورده باقی میماند.
- رمزگشایی تگهای EXIF. payload APP1 یک ساختار TIFF کوچک با چهار Image File Directory است: 0th IFD (ویژگیهای تصویر اصلی)، Exif SubIFD (نوردهی، لنز، فاصله کانونی، ISO)، GPS IFD (عرض، طول، ارتفاع، جهت) و 1st IFD (تصویر بندانگشتی جاسازیشده). هر تگ یک کد عددی، یک نوع داده (بایت، short، long، rational، رشته ASCII) و یک مقدار دارد. ابزار کدهای عددی را به نامهای قابل خواندن توسط انسان با استفاده از دیکشنری تگ piexifjs نگاشت میکند، سپس آنها را در پنل متادیتا گروهبندیشده بر اساس IFD رندر میکند.
- علامتگذاری تگهای GPS. هر تگ در GPS IFD با یک نشانه حریم خصوصی قرمز برجسته میشود. عرض و طول جغرافیایی بهصورت سه عدد rational (درجه، دقیقه، ثانیه) بهعلاوه یک جهت مرجع (N یا S، E یا W) ذخیره میشوند. ابزار آنها را به درجه اعشاری علامتدار با شش رقم دقت (~۱۱ سانتیمتر در استوا) تبدیل میکند و نتیجه را در پنل GPS بههمراه یک لینک OpenStreetMap نشان میدهد. هیچ درخواست tile ارسال نمیشود — لینک بهصورت محلی تولید میشود و فقط اگر روی آن کلیک کنید باز میشود.
- حذف متادیتا. برای فایلهای JPEG مسیر پیشفرض از piexifjs برای حذف کامل بخش APP1 استفاده میکند و یک dataURL جدید با دادههای پیکسل دستنخورده برمیگرداند. وقتی «حفظ جهت» فعال است، ابزار تصویر را روی یک
<canvas>برای تطابق با مقدار تگOrientationاصلی (۱–۸) قبل از حذف میچرخاند، بنابراین نتیجه بصری با آنچه دوربین شما در نظر داشت مطابقت دارد — چرخش در پیکسلها پخته میشود به جای اینکه به یک پرچم متادیتا وابسته باشد. - مسیر رمزگذاری مجدد Canvas. وقتی «حفظ پروفایل رنگ ICC» خاموش است، ابزار تصویر را روی یک
<canvas>پنهان رسم میکند وcanvas.toBlob('image/jpeg', quality)را فراخوانی میکند. این مسیر همه چیز (EXIF، XMP، IPTC، پروفایل ICC، تصویر بندانگشتی) را حذف میکند و به شما امکان میدهد نوار کیفیت JPEG را از ۶۰ تا ۱۰۰ کنترل کنید. پیشفرض ۹۲ است که فایلهایی در چند درصد از اندازه اصلی با کیفیت غیرقابل تشخیص از سورس در اکثر عکسها تولید میکند. - دانلود فایل پاک. blob پاکشده بهعنوان یک دانلود با نام
<original-name>-stripped.jpgارائه میشود. ابزار نتیجه را دوباره تجزیه میکند و تأیید میکند که بخش GPS EXIF قبل از ظاهر شدن لینک دانلود خالی است، بنابراین هرگز فایلی با برچسب «حذفشده» دریافت نمیکنید که هنوز یک تگ موقعیت داشته باشد. فایلهای PNG و WebP اصلاً EXIF ندارند؛ ابزار یک پیام «EXIF یافت نشد» نشان میدهد و مرحله حذف را برای آن فرمتها رد میکند.
چرا قبل از اشتراکگذاری EXIF را حذف کنیم
- حریم خصوصی موقعیت. گوشیهای هوشمند بهطور پیشفرض مختصات دقیق GPS را در هر عکسی جاسازی میکنند. یک JPEG از یک رستوران، دفتر یا خانه آن آدرس را با دقت حدود پنج متری در متادیتا حمل میکند. قبل از ارسال در شبکههای اجتماعی، ایمیل به یک غریبه، یا پیوست کردن به یک تیکت پشتیبانی عمومی، تگ GPS را حذف کنید و آن اثر انگشت موقعیت را کاملاً بردارید.
- ناشناسی در انتشارات. روزنامهنگاران، فعالان و افشاگران قبل از ارسال عکسها EXIF را حذف میکنند زیرا شماره سریال دوربین، نسخه firmware لنز و زمانبندی ایجاد همگی میتوانند با تصاویر منتشرشده دیگر متقاطع بررسی شوند تا عکاس شناسایی شود. حذف این تگها یک گام پایهای عملیاتی-امنیتی برای هر کسی است که نامش نباید به یک دستگاه فیزیکی خاص مرتبط باشد.
- اندازه فایل کوچکتر. یک JPEG معمولی گوشی هوشمند ۵ تا ۱۵ کیلوبایت متادیتا در بخش APP1 خود حمل میکند، از جمله تصویر بندانگشتی جاسازیشده ۱۶۰ × ۱۲۰. این نسبت به یک عکس ۵ مگابایتی کوچک است، اما حذف آن از یک بسته ۱۰۰۰ تصویر محصول ۵ تا ۱۵ مگابایت در هر دور آپلود صرفهجویی میکند — مفید هنگام کاهش یک کاتالوگ محصول، کتابخانه عکس استوک یا صادرات Pinterest.
- حذف اثر انگشت دوربین. ساخت، مدل، نسخه firmware، شناسه لنز و تعداد عملکرد شاتر دوربین یک اثر انگشت تشکیل میدهند که میتواند عکسها را در آپلودهای جداگانه حتی وقتی EXIF در غیر این صورت خنثی است مرتبط کند. اگر تصاویر را بدون افشای سختافزار خود به اشتراک میگذارید (یک گزارش باگ، یک ارسال مسابقه، یک پورتفولیو ناشناس)، Exif SubIFD همان جایی است که اطلاعات شناساییکننده قرار دارد. آن را حذف کنید و ارتباط قطع میشود.
کاربردهای رایج
حذف EXIF هر بار که یک عکس دست به دست میشود و متادیتایی که حمل میکند میتواند برای فرستنده یا موضوع مشکل ایجاد کند مطرح میشود.
- آپلودهای شبکههای اجتماعی: اکثر پلتفرمها به هر حال EXIF را سمت سرور حذف میکنند، اما حذف سمت کلاینت ابتدا به معنای آن است که مختصات اصلی هرگز به سرورهای پلتفرم منتقل نمیشود. اگر pipeline آنها هرگز نشت کند (یا احضاریه دریافت کند)، GPS اصلی در لاگهایشان نیست چون هرگز ارسال نشده است.
- روزنامهنگاری و عکاسی مستند: سرویسهای خبری و میزهای عکس نیاز به متادیتای پاک دارند تا نسبتدهی امضا و دادههای زیرنویس توسط میز کنترل شوند، نه دوربین. ویراستاران عکس همه تصاویر ورودی را قبل از رفتن روی سیم از مرحله پاکسازی متادیتا عبور میدهند.
- فهرستهای ملک و محصول: مشاوران املاک و فروشندگان تجارت الکترونیک بهطور معمول عکسهایی گرفتهشده در آدرس ملک یا انبار را آپلود میکنند. حذف GPS قبل از آپلود از انتشار تصادفی یک آدرس دقیق کسبوکار در فایل جلوگیری میکند — مفید هنگامی که انبار یک اقامتگاه خصوصی است یا ملک هنوز مسکونی است.
یک مثال عملی
یک JPEG ۳.۵ مگابایتی گرفتهشده با یک iPhone جدید حدود ۱۲ کیلوبایت متادیتای APP1 دارد: مختصات GPS با جهت و ارتفاع، زمانبندی ثبت تا میلیثانیه، مدل دوربین و شناسه لنز، تنظیمات تعادل سفید، و یک تصویر بندانگشتی جاسازیشده ۱۶۰ × ۱۲۰. پس از حذف با مسیر پیشفرض piexif، فایل به ۳.۴۸۸ مگابایت میرسد. ۱۲ کیلوبایت سبکتر، از نظر پیکسل یکسان با اصل، و عاری از ping موقعیت است. پنل GPS در بالا دقیقاً نشان میدهد قبل از دانلود کدام مختصات حذف شدهاند.
متادیتای EXIF چیست؟
EXIF (فرمت فایل تصویر قابل تعویض) یک استاندارد تعریفکننده نحوه ذخیره متادیتا توسط دوربینهای دیجیتال و گوشیهای هوشمند در داخل فایلهای تصویری است. یک JPEG معمولی گوشی هوشمند ساخت و مدل دوربین، فاصله کانونی لنز، سرعت شاتر، ISO، موقعیت دقیق GPS (تا چند متر)، زمانبندی ایجاد و یک تصویر بندانگشتی جاسازیشده کوچک را حمل میکند — همه در تصویر رندرشده نامرئی هستند اما توسط هر برنامهای که از EXIF آگاه است قابل خواندن هستند، از جمله مرورگر فایل OS و اکثر ابزارهای ویرایش عکس.
چرا باید قبل از اشتراکگذاری عکس EXIF را حذف کنم؟
تگ GPS نشان میدهد عکس کجا گرفته شده، تا چند متر دقت. بدون حذف عکس آن موقعیت را با هر کسی که فایل را دریافت میکند به اشتراک میگذارید. شماره سریال دوربین و شناسه لنز میتوانند عکاس را در آپلودهای جداگانه نیز اثرانگشت بگذارند، که برای هر کسی که با نام مستعار منتشر میکند اهمیت دارد. حذف همه اینها را قبل از ترک دستگاه شما توسط فایل پاک میکند.
آیا این کیفیت تصویر را تحت تأثیر قرار میدهد؟
مسیر پیشفرض piexif بخش APP1 را بدون لمس کردن پیکسلهای تصویر حذف میکند، بنابراین کیفیت از نظر بیتی با اصل یکسان است. مسیر رمزگذاری مجدد canvas (که وقتی «حفظ پروفایل رنگ ICC» خاموش است، یا وقتی «حفظ جهت» برای یک تصویر چرخیده روشن است استفاده میشود) پیکسلها را با مقدار انتخابشده نوار کیفیت JPEG رمزگذاری مجدد میکند — نوار را روی ۹۵ یا بالاتر تنظیم کنید تا نتیجه بصری در اکثر عکسها نزدیک به سورس باشد.
در مورد فایلهای HEIC از iPhone چطور؟
حذف HEIC به پشتیبانی بومی HEIC مرورگر شما بستگی دارد. Safari 13+ بهصورت بومی HEIC را رمزگشایی میکند؛ Chrome و Firefox این کار را نمیکنند. اگر مرورگر شما نمیتواند HEIC را نمایش دهد، ابتدا از گزینه «صادر بهعنوان JPEG» تلفن خود استفاده کنید (در iOS Photos: اشتراکگذاری → گزینهها → سازگارترین)، سپس JPEG را اینجا آپلود کنید. مرحله حذف روی فایل تبدیلشده به همان روش هر JPEG دیگری کار میکند.
هر حذف بهصورت محلی در مرورگر شما اجرا میشود. عکس اصلی هرگز به هیچ سروری نمیرسد و فایل پاکشده کاملاً از ArrayBuffer بارگذاریشده در حافظه در زمان آپلود تولید میشود. یک عکس در بالا بکشید، متادیتا را بررسی کنید و نسخه حذفشده را دانلود کنید.