I have over 500 pictures that I need to watermark with text that will be different for every image. For example, if I have a picture of a building I want to watermark the name or address of this building.

I have the unique information saved in an Excel file with the image file name.

Now after searching for the past three days I have not come across a tool that can batch watermark unique text for each picture.

I am primarily running on a Windows, and I am comfortable using command line to complete this process. I am also willing to spend some money on a tool to do this so it doesn't need to be free and/or open source.

  • Welcome to Software Recommendations! We will need a bit more information to give good recommendations here. Please take a look at What is required for a question to contain "enough information"? Then please edit your question and see if you can incorporate some of these improvements at minimum: What OS or is a web-app acceptable? GUI only or CLI only or either? Commented Mar 8, 2014 at 17:27
  • 1
    Thanks, I should have done that before I posted. I originally posted this question on photo.stackexchange.com but that seemed to make some people upset over there. Commented Mar 8, 2014 at 18:12
  • @njackson.gis Not "upset". It was just the wrong place for it.
    – mattdm
    Commented Mar 8, 2014 at 18:14
  • @mattdm i was not talking about your post. its the helpful one. I was referring to the other posts. I had seen a lot of question about watermarking and processing images on that site and that's why I decided to post there first. thanks for your suggestion! Commented Mar 8, 2014 at 18:20
  • @njackson.gis Is reading the excel file a requirement or would you be okay to have to save that as a CSV or some other format? Commented Mar 8, 2014 at 18:56

2 Answers 2


You could do this with the ImageMagick convert command from a batch file it will allow you to apply text to a file, convert the type, rescale, etc., all in a single operation - it is also free.

e.g. convert rose.jpg -draw "text 25,60 'By Any Other Name'" outdir/rose.jpg

Alternatively you could use python, PIL (the python image library) or Pillow (a fork of PIL) and xlrd to do the whole job automatically including reading from the excel files. These are also free tools but will take a little more learning on your part. I would strongly recommend taking a backup of all your images before trying any operations on them.


Just to add - seeing some of the comments on the original question that all the tools that I mention in the answer above are:

  • Free (Gratis)
  • Free (Open Source)
  • Cross platform, specifically:
    • ImageMagik command line graphics manipulation:
      • Binary downloads for Unix, Mac OS(X), Windows & Linux
      • Source available so you can probably build it for just about anything else.
    • Python Programming Language:
      • Windows binaries available
      • Usually already installed on OS(S), Linux, Unix & many others
      • Ditto the source source
    • PIL/Pillow Image Manipulation Library:
      • Binaries available for Windows
      • Installed from source if you have Python/PIP on other platforms
    • XLRD Python Excel Reader Library
      • Source distribution works on any python platform
  • Steve this does the trick. I just converted my excel to .txt and then create a batch file to add the text. Thanks for pointing me to this software! Commented Mar 8, 2014 at 21:35
  • Gland to hear it worked for you @njackson.gis Commented Mar 8, 2014 at 22:08

Maybe too late, but I stumbled over this question 2 weeks ago and found a solution by doing some coding:

I managed to solve a similar issue with bulkWaterMark and .NET, where you can watermark dynamical text via a feature called expressions. I used the Freeware version of the tool and coded a custom expression context plug-in that loads data from an xml file where image informations are stored. Then I wrote an expression that takes the current image's filename as parameter and looks it up in the xml file - all done in C#.

The problem was that there is no SDK documentation available and I'm also not sure if this plug-in interface is officially public, but you just have to inherit 2 or 3 classes and override some methods to inject your own code into the application. It worked like a charm then.

You just need to reference the assembly PMlabs.GrfX.Framework and create your own implementation of these three classes:

 - ExpressionsPlugIn<TExpressionContext>
 - ExpressionContext
 - Expression<TExpressionContext>

The Expression class is the function that is called when an image gets rendered. The context holds multiple expressions and the plug-in class holds the context. Just make sure to implement everything in the abstract Expression class, the others are just plumbing code.

After compiling your plug-in assembly put it into the bin/plugins folder of your bulkWaterMark installation.

Another edit: Published a simplified code of my solution at Github today: https://github.com/barnacleboy/bulkWaterMarkExpressionPlugin

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.