Imagemagick, how to print date the photo was taken on the image
Imagemagick 6.9.11-60 on Debian. How to print date & time the photo was taken on the image? (on existing images). I have set this option in camera settings, but it only applies to new photos. The date is on the image medatada. It should be actual date the photo was taken, not the date it was saved on PC harddrive.
A lot will vary depending on the images you have and the meta-data they hold, but for example with ImageMagick you can imprint the EXIF date and time from myphoto.jpg
with
magick myphoto.jpg -fill black -undercolor white -pointsize 96 -gravity southeast
-annotate 0 ' %[exif:datetime] ' output.jpg
If you don’t have the magick
command, convert
will work just as well.
If you want a non-ISO date format, you can extract the date first with identify
and manipulate it with awk
or other tools, e.g.
identify -format '%[exif:datetime]' myphoto.jpg |
awk -F'[ :]' '{print $3":"$2":"$1 " " $4":"$5}'
would change 2023:10:04 09:29:24
to 04:10:2023 09:29
.
If your image does not have EXIF data, you might be able to find other time information, e.g. '%[date:create]'
. Use identify -verbose
on the file to list all the properties.
To calculate a suitable pointsize for the annotation
you can similarly use identify
to find the width of the image:
identify -format '%w' myphoto.jpg
See imagemagick for many examples and alternatives.
Here’s a small shell script:
#!/bin/bash
let ps=$(identify -format '%w' input.jpg)/20
# 2023:10:04 09:29:24
datetime=$(identify -format %[exif:datetime] input.jpg)
if [ -z "$datetime" ]
then # date:create: 2023-11-11T14:40:21+00:00
datetime=$(identify -format %[date:create] input.jpg)
fi
datetime=$(echo "$datetime" | gawk -F'[- :T+]' '{print $3":"$2":"$1 " " $4":"$5}' )
magick input.jpg -fill black -undercolor white -pointsize "$ps" -gravity southeast
-annotate 0 "$datetime" output.jpg