JHEAD(1) General Commands Manual JHEAD(1)

jhead - ابزار دستکاری هدر Exif تصاویر JPEG دوربین‌های دیجیتال

jhead [ گزینه‌ها ] [ فایل... ]

jhead برای نمایش و دستکاری داده‌های موجود در هدر Exif تصاویر JPEG دوربین‌های دیجیتال به کار می‌رود. به‌طور پیش‌فرض، jhead تنظیمات کاربردی‌تر دوربین را از فایل در قالبی کاربرپسند نمایش می‌دهد.

jhead همچنین می‌تواند برای دستکاری برخی جنبه‌های تصویر مربوط به هدرهای JPEG و Exif استفاده شود؛ مانند تغییر برچسب‌های زمانی داخلی، حذف تصویر بندانگشتی (thumbnail)، یا بازگرداندن هدرهای Exif به تصاویر ویرایش‌شده پس از اینکه ویرایشگرهای گرافیکی هدر Exif را حذف کرده‌اند. jhead همچنین می‌تواند برای راه‌اندازی و اجرای برنامه‌های دیگر، با شیوه‌ای شبیه به دستور find در یونیکس اما بسیار ساده‌تر، استفاده شود.

انتقال هدر Exif از یک JPEG (دارای هدر Exif) در file به تصویری که دستکاری می‌شود. این گزینه زمانی مفید است که مایلید عکس‌ها را ویرایش کنید اما همچنان هدر Exif روی عکس‌هایتان حفظ شود. از آنجا که بیشتر برنامه‌های ویرایش عکس هدر Exif را پاک می‌کنند، می‌توان از این گزینه برای کپی مجدد آن‌ها از نسخه‌های اصلی پس از ویرایش عکس‌ها استفاده کرد.
این ویژگی دارای یک گزینه جالب «مسیر نسبی» برای تعیین نام بندانگشتی است. هر زمان که نام شامل نویسه‌های «&i» باشد، نام فایل اصلی جایگزین این نام خواهد شد. این کار امکان ایجاد یک «نام نسبی» در jhead را هنگام پردازش دسته‌ای از فایل‌ها فراهم می‌کند. برای مثال، عبارت:
jhead -te originals/&i *.jpg
هدر exif را برای هر فایل .jpg در دایرکتوری originals با همان نام منتقل می‌کند. هم Win32 و هم بیشتر شل‌های یونیکس با نویسه «&» به‌طور ویژه برخورد می‌کنند، بنابراین باید این گزینه خط فرمان را درون نقل‌قول قرار دهید تا نویسه «&» بتواند به برنامه ارسال شود.
حذف فیلد توضیح (comment) از هدر JPEG. توجه داشته باشید که این توضیح بخشی از هدر Exif نیست.
حذف کامل هدر Exif. بخش‌های دیگر متادیتا دست‌نخورده باقی می‌مانند.
حذف بخش IPTC، در صورت وجود. بخش‌های دیگر متادیتا دست‌نخورده باقی می‌مانند.
حذف بخش XMP، در صورت وجود. بخش‌های دیگر متادیتا دست‌نخورده باقی می‌مانند.
حذف بخش‌هایی از jpeg که Exif نیستند، توضیح نیستند و نقشی در تصویر نیز ندارند؛ مانند داده‌هایی که فتوشاپ ممکن است در تصویر باقی بگذارد.
حذف تمام بخش‌های JPEG که برای رندر تصویر ضروری نیستند. هرگونه متادیتایی که برنامه‌های گوناگون ممکن است در تصویر باقی گذاشته باشند را پاک می‌کند. ترکیبی از گزینه‌های -de، -dc و -du است.
ایجاد هدر مینیمال exif. هدر Exif فقط شامل فیلدهای تاریخ/زمان و فیلدهای خالی بندانگشتی خواهد بود. تاریخ/زمان به‌طور پیش‌فرض روی زمان فایل تنظیم می‌شود. اگر می‌خواهید هدر exif حاوی تصویر بندانگشتی باشد، همراه با گزینه -rgt استفاده کنید. توجه داشته باشید که ایجاد هدر exif در حال حاضر بسیار محدود است و هیچ فیلد دیگری را نمی‌توان از این طریق به هدر exif افزود.
ویرایش فیلد توضیح هدر JPEG (توجه داشته باشید که این فیلد توضیح خارج از ساختار Exif است و می‌تواند بخشی از تصاویر JPEG با یا بدون ساختار Exif باشد).
یک فایل موقت شامل توضیح ایجاد می‌شود و یک ویرایشگر متن برای ویرایش فایل اجرا می‌گردد. ویرایشگر در متغیر محیطی EDITOR مشخص می‌شود. اگر هیچ ویرایشگری مشخص نشده باشد، به ترتیب notepad در ویندوز و vi در یونیکس استفاده می‌شوند. پس از خروج از ویرایشگر، داده‌ها به تصویر بازگردانده شده و فایل موقت حذف می‌شود.
ذخیره بخش توضیح در یک file
جایگزینی توضیح با متن برگرفته از file
جایگزینی توضیح با رشته مشخص‌شده از خط فرمان

تنظیم برچسب زمانی سیستم فایل بر روی مقداری که در هدر Exif ذخیره شده است.
تنظیم برچسب زمانی Exif بر روی برچسب زمانی فایل. نیازمند وجود قبلی هدر Exif است. در صورت نیاز از گزینه -mkexif برای ایجاد آن استفاده کنید.
این گزینه باعث می‌شود فایل‌ها با استفاده از اطلاعات تاریخ موجود در فیلد "DateTimeOriginal" هدر Exif تغییر نام داده شده و/یا جابه‌جا شوند. اگر فایل فاقد هدر Exif باشد، یا DateTimeOriginal حاوی مقدار معتبری نباشد، از تاریخ فایل استفاده می‌شود. اگر نام جدید شامل '/' باشد، به‌عنوان یک مسیر جدید تفسیر شده و فایل بر همین اساس جابه‌جا خواهد شد.
اگر format_string حذف شود، نام فایل به MMDD-HHMMSS تغییر می‌یابد. توجه داشته باشید که این الگو شامل سال نمی‌شود (به هر حال من هیچ‌وقت عکس‌هایی از سال‌های مختلف را کنار هم نگه‌داری نمی‌کنم).
اگر format_string مشخص شود، به‌عنوان رشته قالب به تابع strftime ارسال خواهد شد. علاوه بر این، اگر رشته قالب حاوی '%f' باشد، با نام اصلی فایل (بدون پسوند) جایگزین می‌شود. '%i' با یک شماره ترتیبی جایگزین خواهد شد. صفرهای پیشگام را می‌توان مانند printf تعیین کرد؛ یعنی '%04i' عدد را با صفرهای پیشگام به ۴ رقم پر می‌کند.
اگر نام شامل '/' باشد، به‌عنوان مسیر جدیدی برای فایل تفسیر می‌شود. اگر مسیر جدید وجود نداشته باشد، این مسیر ایجاد خواهد شد.
اگر نام مقصد از قبل وجود داشته باشد، نام با "a"، "b"، "c" و غیره دنبال می‌شود، مگر اینکه نام به یک حرف ختم شود که در این صورت با "0"، "1"، "2" و غیره دنبال خواهد شد.
این ویژگی به‌ویژه زمانی مفید است که برای عکس‌برداری از یک رویداد از بیش از یک دوربین دیجیتال استفاده شده باشد. با تغییر نام آن‌ها بر اساس طرحی بر مبنای تاریخ، در بیشتر فهرست‌های دایرکتوری و مرورگرهای تصویر به‌طور خودکار به ترتیب زمان ثبت نمایش داده می‌شوند. در غیر این صورت، اگر مرورگر تصویر شما از فهرست‌بندی بر اساس زمان فایل پشتیبانی می‌کند، می‌توانید از گزینه -ft برای تنظیم زمان فایل بر روی زمان ثبت عکس استفاده کنید.
برخی از آرگومان‌های کاربردی‌تر برای strftime عبارتند از:
%H - ساعت در قالب ۲۴ ساعته (00 - 23)
%j - روز سال به‌صورت عدد ده‌دهی (001 - 366)
%m - ماه به‌صورت عدد ده‌دهی (01 - 12)
%M - دقیقه به‌صورت عدد ده‌دهی (00 - 59)
%S - ثانیه به‌صورت عدد ده‌دهی (00 - 59)
%w - روز هفته به‌صورت عدد ده‌دهی (0 - 6؛ یکشنبه 0 است)
%y - سال بدون قرن، به‌صورت عدد ده‌دهی (00 - 99)
%Y - سال با قرن، به‌صورت عدد ده‌دهی
مثال:
jhead -n%Y%m%d-%H%M%S *.jpg
این دستور نام فایل‌های منطبق بر *.jpg را به قالب YYYYMMDD-HHMMSS تغییر می‌دهد.
برای مشاهده فهرست کامل آرگومان‌های strftime، به صفحه راهنمای strftime مراجعه کنید. توجه داشته باشید که برخی از آرگومان‌های تابع strftime (که در اینجا ذکر نشده‌اند) رشته‌هایی با نویسه‌هایی مانند ':' تولید می‌کنند که ممکن است در برخی سیستم‌ها به‌عنوان بخشی از نام فایل معتبر نباشند.
تنظیم زمان ذخیره‌شده در هدر Exif با مقدار h:mm به جلو یا به عقب. زمانی کاربرد دارد که عکس‌ها با زمان نادرست روی دوربین گرفته شده باشند؛ مانند پس از سفر میان مناطق زمانی، یا زمانی که ساعت تابستانی تغییر کرده است.
مثال‌ها:
افزودن ۱ ساعت و ۵ دقیقه به زمان:
jhead -ta+1:05
کاهش زمان به میزان یک ثانیه:
jhead -ta-0:0:1
این گزینه تمام فیلدهای تاریخ/زمان در هدر exif را تغییر می‌دهد، از جمله "DateTimeOriginal" (تگ 0x9003) و "DateTimeDigitized" (تگ 0x9004).
مانند -ta عمل می‌کند، اما برای مشخص کردن اختلاف‌های بزرگ تاریخ کاربرد دارد؛ زمانی که تاریخ دوربین‌ها به اشتباه تنظیم شده باشد، مانند بازنشانی تاریخ و زمان بر اثر درآوردن باتری در برخی دوربین‌ها.
از آنجا که ماه‌ها و سال‌های مختلف تعداد روزهای متفاوتی دارند، یک اختلاف ساده بر حسب ماه، روز و سال در مواردی منجر به نتایج غیرمنتظره می‌شود. بنابراین اختلاف زمانی به‌صورت تفاوت میان دو تاریخ مشخص می‌شود تا jhead بتواند دقیقاً محاسبه کند که برچسب زمانی به چند روز تنظیم نیاز دارد، از جمله سال‌های کبیسه و تغییرات ساعت تابستانی. تاریخ‌ها به‌صورت yyyy:mm:dd مشخص می‌شوند. برای تنظیمات زیر یک روز، می‌توان ساعت روز را نیز با مشخص کردن yyyy:mm:dd/hh:mm یا yyyy:mm:dd/hh:mm:ss لحاظ کرد.
مثال‌ها:
سال دوربین برای عکس‌های گرفته‌شده در آوریل به‌جای ۲۰۰۴ روی ۲۰۰۵ تنظیم شده بود:
jhead -da2004:03:01-2005:03:01
تاریخ پیش‌فرض دوربین 2002:01:01 است و تاریخ در 2005:05:29 در ساعت ۱۱:۲۱ صبح ریست شده است:
jhead -da2005:05:29/11:21-2002:01:01
تنظیم زمان ذخیره‌شده در هدر Exif بر روی مقدار مشخص‌شده در خط فرمان. زمان باید به این صورت مشخص شود: yyyy:mm:dd-hh:mm:ss
تنظیم تاریخ ذخیره‌شده در هدر Exif بر روی مقدار مشخص‌شده در خط فرمان. می‌تواند برای تنظیم تاریخ کامل، فقط سال و ماه، یا فقط سال استفاده شود. تاریخ به این صورت مشخص می‌شود: yyyy:mm:dd، yyyy:mm یا yyyy

حذف تصاویر بندانگشتی از هدر Exif، اما دست‌نخورده باقی گذاشتن بخش‌های مهم دیگر. این گزینه تصویر بندانگشتی را از هدر Exif حذف می‌کند، به این شرط که بندانگشتی آخرین بخش هدر Exif باشد (که تا جایی که می‌دانم همیشه همین‌طور است). هدرهای Exif یک تصویر بندانگشتی توکار دارند که معمولاً حدود ۱۰ کیلوبایت فضا اشغال می‌کند. این بندانگشتی توسط دوربین‌های دیجیتال استفاده می‌شود. ویندوز XP نیز ممکن است در صورت وجود از این بندانگشتی استفاده کند (اما به آن نیازی ندارد). این بندانگشتی‌ها حتی برای نمایش تمام‌صفحه روی نمایشگر LCD دوربین دیجیتال نیز بیش از حد کوچک هستند. من با هیچ عارضه جانبی نامطلوبی ناشی از حذف بندانگشتی‌ها مواجه نشده‌ام، حتی در نرم‌افزارهای همراه دوربین دیجیتال قدیمی المپوس من. با احتیاط استفاده کنید.
ذخیره تصویر بندانگشتی یکپارچه در file تصویر بندانگشتی درون هدر Exif قرار دارد و یک تصویر JPEG با وضوح بسیار پایین است. توجه داشته باشید که هرگونه تغییری در عکس، به‌جز با برخی برنامه‌ها، عموماً هدر Exif و همراه با آن بندانگشتی را پاک می‌کند.
وضوح این بندانگشتی برای استفاده‌های واقعی بیش از حد پایین است.
این ویژگی یک گزینه جالب «مسیر نسبی» برای تعیین نام بندانگشتی دارد. هر زمان که نام برای file شامل نویسه‌های '&i' باشد، jhead نام فایل اصلی را جایگزین این نام خواهد کرد. این کار امکان ایجاد یک «نام نسبی» را هنگام کار بر روی دسته‌ای از فایل‌ها فراهم می‌کند. برای مثال، عبارت:
jhead -st thumbnails/&i *.jpg
یک بندانگشتی برای هر فایل .jpg در دایرکتوری thumbnails با همان نام ایجاد می‌کند (البته به شرطی که دایرکتوری thumbnails از قبل وجود داشته باشد). هم Win32 و هم شل‌های یونیکس با نویسه '&' رفتار ویژه‌ای دارند، بنابراین باید این گزینه خط فرمان را درون نقل‌قول قرار دهید تا '&' بتواند به برنامه ارسال شود.
اگر یک '-' برای فایل خروجی مشخص شود، تصویر بندانگشتی به خروجی استاندارد (stdout) فرستاده می‌شود. (فقط در نسخه یونیکس)
جایگزینی تصاویر بندانگشتی در هدر Exif. این گزینه تنها زمانی کار می‌کند که هدر exif از قبل شامل یک تصویر بندانگشتی باشد و بندانگشتی در انتهای هدر قرار گرفته باشد (که در صورت تهیه عکس با دوربین دیجیتال، هر دو همواره برقرار است).
تولید مجدد بندانگشتی exif. مقدار 'size' حداکثر ارتفاع یا عرض بندانگشتی را مشخص می‌کند. برای تولید مجدد بندانگشتی به برنامه 'mogrify' (از مجموعه ImageMagick) متکی است. این گزینه فقط در صورتی کار می‌کند که تصویر از قبل دارای یک بندانگشتی باشد.

چرخاندن تصویر به صورت عمودی و صحیح با استفاده از برچسب 'Orientation' در هدر Exif. برنامه jpegtran برای انجام چرخش استفاده می‌شود. این برنامه در بیشتر توزیع‌های لینوکس موجود است. برای ویندوز باید یک نسخه از آن را تهیه کنید. پس از چرخش، برچسب جهت (orientation) هدر Exif روی '1' (جهت عادی) تنظیم می‌شود. تصویر بندانگشتی نیز چرخانده می‌شود. سایر فیلدهای هدر Exif از جمله ابعاد دست‌نخورده باقی می‌مانند، اما ارتفاع/عرض JPEG تنظیم می‌شود. این ویژگی به‌ویژه با دوربین‌های جدیدتر کانن که برچسب جهت را به‌طور خودکار با سنسور جاذبه تنظیم می‌کنند بسیار کاربردی است.
پاک کردن فیلد چرخش در هدر Exif بدون تغییر در خود تصویر. زمانی کاربرد دارد که تصاویر قبلاً بدون پاک کردن برچسب چرخش Exif چرخانده شده باشند، چرا که برخی مرورگرهای تصویر با تنظیم بودن برچسب چرخش، تصاویر را به‌طور خودکار می‌چرخانند. گاهی اوقات، بندانگشتی‌ها و برچسب‌های چرخش بر اثر دستکاری با ابزارهای مختلف ممکن است به شدت ناهمگام شوند. برای بازنشانی همه چیز، از -norot همراه با -rgt برای رفع آن استفاده کنید.

نمایش خلاصه گزینه‌های خط فرمان.
برنامه را حتی پرگوتر از حالت پیش‌فرض می‌کند. مانند برنامه‌های DOS، و برعکس برنامه‌های یونیکس، Jhead حتی زمانی که هیچ مشکلی پیش نیامده باشد بازخوردی از کارهای خود ارائه می‌دهد. از آنجا که من یک کاربر ویندوز هستم، وقتی برنامه‌ای به مدت ۲۰ ثانیه به من بازخوردی نمی‌دهد، فرض می‌کنم کرش کرده است.
عدم نمایش خروجی در صورت موفقیت، بیشتر شبیه برنامه‌های یونیکس.
چاپ اطلاعات نسخه و تاریخ کامپایل.
نمایش نقشه‌ای از بایت‌های موجود در هدر exif. هنگام تحلیل هدرهای عجیب exif مفید است؛ برای کسانی که توسعه‌دهنده نرم‌افزار نیستند کاربرد چندانی ندارد.
فرونشانی پیام‌های خطای مربوط به ساختار خراب هدر Exif.
خروجی فشرده و خلاصه. این گزینه باعث می‌شود اطلاعات تصویر به جای چند خط، در یک خط خلاصه شود. برای جستجو با grep در میان تصاویر و همچنین وارد کردن به صفحات گسترده مفید است (داده‌ها با فاصله از هم جدا می‌شوند و از نقل‌قول به‌عنوان مشخص‌کننده متن استفاده می‌شود).

محدود کردن پردازش فایل‌ها به مواردی که مدل دوربین آن‌ها بر اساس اطلاعات تصویر Exif، حاوی زیررشته مشخص‌شده در آرگومان پس از '-model' باشد. برای مثال، دستور زیر فقط تصاویری را فهرست می‌کند که از دوربین S100 گرفته شده‌اند:
jhead -model S100 *.jpg
من از این گزینه برای محدود کردن فشرده‌سازی مجدد JPEG به تصاویری که از دوربین دیجیتال Canon S100 من گرفته شده‌اند استفاده می‌کنم (گزینه -cmd را ببینید).
نادیده گرفتن تمام فایل‌هایی که فاقد هدر Exif هستند. عکس‌هایی که مستقیماً از دوربین دیجیتال گرفته شده‌اند دارای هدر Exif هستند، در حالی که بسیاری از ابزارهای دستکاری عکس هدر Exif را دور می‌اندازند.
نادیده گرفتن همه فایل‌ها به‌جز فایل‌هایی که با فرآیند پردازش مشخص‌شده تطابق دارند. برای مثال، تعیین "-proc 0"; تنها فایل‌های با کدگذاری baseline را پردازش می‌کند. تعیین "-proc 2"; تنها فایل‌های با کدگذاری progressive را پردازش خواهد کرد. این گزینه هنگام تبدیل فایل‌ها به jpegهای progressive با استفاده از jpegtran مفید است تا فایل‌هایی که از قبل به‌عنوان progressive کدگذاری شده‌اند نادیده گرفته شوند. برای مثال، دستور زیر تنها فایل‌های baseline را به progressive تبدیل می‌کند:
jhead -proc 0 -cmd "jpegtran -progressive -outfile &o &i" *.jpg
اجرای دستور مشخص‌شده روی هر فایل JPEG که قرار است پردازش شود.
بخش Exif هر فایل پیش از اجرای دستور خوانده می‌شود و پس از پایان کار دستور مجدداً درج می‌گردد.
دستور مشخص‌شده برای هر فایل JPEG پردازش‌شده به‌طور جداگانه فراخوانی می‌شود، حتی اگر چندین فایل (به‌صورت صریح یا با نویسه‌های عمومی/wildcard) مشخص شده باشند.
نمونه کاربرد:
با داشتن یک دایرکتوری کامل از عکس‌های دوربین S100 خود، دستورات زیر را اجرا می‌کنم:
jhead -cmd mogrify -quality 80 &i -model S100 *.jpg
jhead -cmd jpegtran -progressive &i > &o *.jpg
دستور اول، تمام JPEGهای موجود در درخت دایرکتوری را که در هدر Exif خود نشان می‌دهند از دوربین Canon S100 هستند، با حفظ وضوح به کیفیت ۸۰٪ بازفشرده (mogrify) می‌کند. این یک فرآیند «با اتلاف» (lossy) است، بنابراین من آن را فقط روی فایل‌های متعلق به دوربین کانن و فقط یک بار اجرا می‌کنم. دستور بعدی سپس آن JPEGها را دریافت کرده و به JPEGهای پیش‌رونده (progressive) تبدیل می‌کند. نتیجه همان تصاویر بدون هیچ تفاوت محسوسی است که در نیمی از فضای قبلی ذخیره شده‌اند. این کار صرفه‌جویی قابل توجهی در برخی دوربین‌ها به همراه دارد.

jpegtran(1), mogrify(1), rdjpgcom(1), wrjpgcom(1)

Matthias Wandel

پس از اینکه jhead برنامه‌ای را برای چرخاندن یا تغییر اندازه تصویر اجرا می‌کند، ابعاد تصویر و بندانگشتی در هدر Exif تنظیم نمی‌شوند.

تغییر داده‌های هدر Exif بسیار محدود است، زیرا jhead در داخل خود تنها یک پیاده‌سازی فقط‌خواندنی از سیستم فایل موجود در هدر Exif دارد. برای مثال، هیچ راهی برای جایگزینی تصویر بندانگشتی یا ویرایش توضیح Exif در هدر Exif وجود ندارد. همچنین هیچ راهی برای ایجاد هدرهای مینیمال exif وجود ندارد.

برخی از دوربین‌های دیجیتال SLR کانن هنگام عکس‌برداری با وضوحی کمتر از وضوح کامل، در تنظیم وضوح مؤثر سنسور ناموفق عمل می‌کنند و باعث می‌شوند jhead عرض سنسور و فاصله کانونی معادل ۳۵ میلی‌متری را به‌طور نادرست محاسبه کند. همین اتفاق می‌تواند ناشی از تغییر اندازه عکس‌ها با فتوشاپ باشد که بخش‌هایی از هدر exif را دستکاری می‌کند. این مورد اغلب به‌عنوان یک باگ در Jhead گزارش می‌شود، اما Jhead نمی‌تواند کار چندانی در مورد داده‌های نادرست انجام دهد.

گزارش‌های اشکال را به آدرس زیر بفرستید: matthias at woodgears dot ca

برنامه Jhead در «مالکیت عمومی» (public domain) قرار دارد. شما می‌توانید آزادانه از jhead رونوشت بردارید و بخشی از آن یا تمام کد آن را در برنامه‌های رایگان یا اختصاصی مجدداً استفاده کنید. با این حال، خواهشمندم آدرس ایمیل من را به شیوه‌ای که ربات‌های هرزنامه بتوانند آن را جمع‌آوری کنند، منتشر نکنید.

2021-03-24 jhead 3.06