As I have already done with python (in How to add a text to a picture using python) , I'm going to write a simple program which adds a text over an image.

The text I want to add will be a simple string and it will be semi-transparent.


To write such a program, as usual I'll use the RMagick library, take a look at the related posts to install ruby and the imageMagick libraries. 


To understand waht I want to do I want to show the original picture and the modified picture:

Original Picture:


Final Picture:







#   text_over.rb

#   A tool to write a semi-transparent textover a picture.


require 'RMagick'

include Magick


img =[0]).first

new_img = "Text_over_#{ARGV[0]}"


layer2 =, 150)


text_over =

text_over.annotate(layer2, 0,0,0,0, "(c) xAppsoftware") do

    text_over.gravity = CenterGravity

    self.pointsize = 100

    self.font_family = "Ubuntu"

    self.stroke = "none"




layer2 = layer2.shade(true, 310, 30)

img.composite!(layer2, SouthWestGravity, HardLightCompositeOp)




The program makes use of the RMagick libraries.

At startup the program reads from the CLI arguments the name of the file we want to modify.

Then, it prepares a new image which will contain the text.

The text_over is a new draing containing the Text with the characteristics specified by gravity, pointsize, font_family and stroke.

the img.composite statement will merge the two images.

and the last line will save the merged image into a new with the new name. I named "text_over.rb" this program. So to launch it on the gg.png image I simply issue the following command:

$ ruby text_over.rb gg.png