Rename photos’ names according to shooting time in a batch mode.

[This article was first published on Category: R | Huidong Tian's Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

For some reason, you want to know the shooting time of your photos. Generally, shooting time can be found as Date modified, if you didn’t made a lot of change to your photos. But, we often make change to our photos, such like copy them from a place to another, edit using Photoshop, Picasa, etc., and then, the Date modified of your photo is not the shooting time anymore. What we do?

Luckily, some photos taken by a camera also recorded the shooting time and save it (e.g. as DateTimeOriginal ) in the header of the photos, so we can find the shooting time by accessing the header of the photos.

Now, the problem is how to access the header information of a photo? I didn’t find any R package can do that, and one reason I believe is that: there is wonderful open source software can do that well – ImageMagick. ImageMagick is a software suite to create, edit, compose, or convert bitmap images. After installing ImageMagick, We can using the shell function to execute ImageMagick from R.

The following is the R code for renaming photos according to the shooting time in a batch mode.

Rename photo using shooting time
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# List all Jpeg photos in a directory,
# you can try some other image formats, like tiff, etc.
file.jpg <- list.files(path = “L:/PhotoDirectory/”, 
  pattern = “\.jpg$”, ignore.case = TRUE, full.names = TRUE)

for (img in file.jpg) { name.1 <- basename(img) # Some photo names can not be used in shell mode, so we rename them. name.2 <- gsub(“\.?jpg$”, “.jpg”, ignore.case = TRUE, gsub(“ |\.|-“, “”, name.1)) name.3 <- paste(dirname(img), name.2, sep = “/”) file.rename(img, name.3) # Access the header inforamtion of a photo using ImageMagick. header <- shell(paste(“identify -verbose”, name.3), intern = TRUE) # In case the photo didn’t record the shooting time, if (any(grepl(“DateTimeOriginal”, header))) { date.m <- header[grepl(“DateTimeOriginal”, header, ignore.case = TRUE)] name.4 <- regmatches(date.m, regexec(“[[:digit:]]{4}.*”, date.m))[[1]] name.5 <- gsub(“ “, “_”, gsub(“:”, “”, name.4)) name.6 <- paste(dirname(img), paste(name.5, “jpg”, sep = “.”), sep = “/”) file.rename(name.3, name.6) } }

To leave a comment for the author, please follow the link and comment on their blog: Category: R | Huidong Tian's Blog.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)