Adding Logo to PNG Image

Problem

You want to add your logo to a png image generated by OEDepict TK. See example in Table 1.

Table 1. Example of adding a logo to a molecule image

image generated by OEDepict TK

image with OpenEye logo

../_images/molecule.png ../_images/molecule-logo.png

Ingredients

Difficulty Level

../_images/chilly.png

Download

Download code

addlogo.py

See also the Usage subsection.

Solution

OEDepict TK does not provide functionality to paste a png image into the png image generated for a molecule. But this can be easily achieved by using the Pillow Python image processing library. The following code illustrates how to superimpose a logo in the bottom right corner of the molecule image.

 1#!/usr/bin/env python3
 2import sys
 3try:
 4    from PIL import Image
 5except ImportError:
 6    print("Please install Pillow from: https://pypi.python.org/pypi/Pillow/3.0.0")
 7    sys.exit(1)
 8
 9
10def main(argv=[__name__]):
11
12    if len(sys.argv) != 4:
13        print("Usage %s <image> <logoimage> <outimage>" % argv[0])
14        return 1
15
16    inimage, logo, outimage = sys.argv[1], sys.argv[2], sys.argv[3]
17    add_logo(inimage, logo, outimage)
18
19    return 0
20
21
22def add_logo(mfname, lfname, outfname):
23
24    mimage = Image.open(mfname)
25    limage = Image.open(lfname)
26
27    # resize logo
28    wsize = int(min(mimage.size[0], mimage.size[1]) * 0.25)
29    wpercent = (wsize / float(limage.size[0]))
30    hsize = int((float(limage.size[1]) * float(wpercent)))
31
32    simage = limage.resize((wsize, hsize))
33    mbox = mimage.getbbox()
34    sbox = simage.getbbox()
35
36    # right bottom corner
37    box = (mbox[2] - sbox[2], mbox[3] - sbox[3])
38    mimage.paste(simage, box)
39    mimage.save(outfname)
40
41
42if __name__ == "__main__":
43    sys.exit(main(sys.argv))

Usage

Usage

addlogo.py script with molecule.png and logo.png test images

prompt > python3 addlogo.py molecule.png logo.png molecule-logo.png

Discussion

To install Pillow in a Python 3 conda environment:

prompt > conda create -n oecookbook python=3
prompt > source activate oecookbook
(oecookbook) prompt > pip install Pillow