DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Building Your Own Ledger: A Solo Developer's Answer to Time and Money Chaos
  • What They Don’t Teach You About Starting Your First IT Job
  • Harnessing AI to Revolutionize IT Service Management: Insights from ManageEngine's Director of AI Research
  • Docker Image Building Best Practices

Trending

  • Microservices: Externalized Configuration
  • How to Parse Large XML Files in PHP Without Running Out of Memory
  • Spring AI Advisors: Chat Memory, Token Tracking, and Message Logging
  • Dear Micromanager: Your Distrust Has a Job; It’s Just Not the One You’re Doing
  1. DZone
  2. Culture and Methodologies
  3. Career Development
  4. Setting Title and Caption With ExifTool

Setting Title and Caption With ExifTool

Set photo titles and captions with ExifTool.

By 
Rob Allen user avatar
Rob Allen
·
Aug. 01, 19 · Tutorial
Likes (1)
Comment
Save
Tweet
Share
7.6K Views

Join the DZone community and get the full member experience.

Join For Free

I recently needed to change the title and caption of some photos, so I turned to ExifTool, as it's the Swiss Army knife of image metadata.

It's a lovely tool with many options, so I wrote a script to make it easy, and while I was there, I used read to prompt me for the info to set. This is the script:

~/bin/exif-set:

#!/usr/bin/env bash

# determine current values
IMAGE_TITLE=$(exiftool -s3 -iptc:ObjectName "$1")
IMAGE_DESCRIPTION=$(exiftool -s3 -iptc:Caption-Abstract "$1")
IMAGE_KEYWORDS=$(exiftool -s -s -s -iptc:Keywords "$1")

# Ask user for new values
read -e -p "Title [$IMAGE_TITLE]: " NEW_TITLE
read -e -p "Description [$IMAGE_DESCRIPTION]: " NEW_DESCRIPTION
read -e -p "Keywords [$IMAGE_KEYWORDS]: " NEW_KEYWORDS

# set to defaults if we got a blank result
NEW_TITLE="${NEW_TITLE:-${IMAGE_TITLE}}"
NEW_DESCRIPTION="${NEW_DESCRIPTION:-${IMAGE_DESCRIPTION}}"
NEW_KEYWORDS="${NEW_KEYWORDS:-${IMAGE_KEYWORDS}}"

# Update
exiftool \
    -overwrite_original \
    -iptc:ObjectName="$NEW_TITLE" \
    -iptc:Caption-Abstract="$NEW_DESCRIPTION" \
    -iptc:Keywords="$NEW_KEYWORDS" \
    "$1"


# display what we've set
exiftool -f \
    -iptc:ObjectName \
    -iptc:Caption-Abstract \
    -iptc:Keywords \
    "$1"


There are a few interesting things that I'd like to point out. Firstly, we used ExifTool to find the current values of the three properties I cared about. For example, for the title:

IMAGE_TITLE=$(exiftool -s3 -iptc:ObjectName "$1")


The IPTC property names are a little opaque, which is partly why I wanted a script, as I'm highly unlikely to remember that the title is the ObjectName property. The -s3 flag returns just the text of the property with no label, as that's what I want to store in the variable. It's a nice feature; I appreciate that I don't have to pipe through sed or awk to extract just the part I want.

Prompting for a new value is done using read. I decided that I also wanted a blank entry (i.e. just pressing return) to indicate that I wanted to keep the current value. This is done using the ":-" parameter substitution feature of bash:

read -e -p "Title [$IMAGE_TITLE]: " NEW_TITLE
NEW_TITLE="${NEW_TITLE:-${IMAGE_TITLE}}"


We now have values to set, which are either new values typed in via read or the original values, so I can just write then back to the file:

exiftool \
    -overwrite_original \
    -iptc:ObjectName="$NEW_TITLE" \
    -iptc:Caption-Abstract="$NEW_DESCRIPTION" \
    -iptc:Keywords="$NEW_KEYWORDS" \
    "$1"


Exiftool knows you want to write metadata because of the "=" assignment of a value to the property name. By default, it will create a copy of the original file before modifying it. I don't need this copy, so overwrite_original prevents a proliferation of files that I would then have to delete.

That's It

I now have a handy command line tool that allows me to change the title, caption and keywords of a photo easily. Job done!



Property (programming) IT Metadata career Blank (solution) Extract Label

Published at DZone with permission of Rob Allen. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Building Your Own Ledger: A Solo Developer's Answer to Time and Money Chaos
  • What They Don’t Teach You About Starting Your First IT Job
  • Harnessing AI to Revolutionize IT Service Management: Insights from ManageEngine's Director of AI Research
  • Docker Image Building Best Practices

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook