Support

submit a bug report if you need technical support or have questions.

Documentation

Visit the Wiki extensive and up to date documentation at your fingertips.

Contact Me

Missing images/links, any comments, suggestions, need help? Contact me

joomla_cms

Digital watermarking is the process of possibly irreversibly embedding information into a digital signal. The signal may be audio, pictures or video, for example. If the signal is copied, then the information is also carried in the copy. In visible watermarking, the information is visible in the picture or video. Typically, the information is text or a logo which identifies the owner of the media. [Wikipedia]

 

I decide to go with an offline watermarking first, but you can let any Joomla!® extension watermark picture on the fly using php and .htaccess (at the cost of additional CPU server resources).

 

Why Watermarking pictures?

There is a lot of reasons, among others:

  • To limit images stealing, advanced users will still be able to crop/blur your watermark through!
  • To drive more new users/returning visitors to your site, anybody using your images in a forums may want to visit your site if the watermark can be read (don’t use complex logo, except if you have a well known brand)
  • To advertise your online work,

Attention

The first thing to do is to make a backup of your images! applying a watermarking is a non reversible process, usually this mean for Joomla!® to save your /images/stories directory

You’ll have to decide what size you want your photos to be displayed at and how much space the text or logo will take up. Keep it small enough so as not to ruin the photo.

Create a watermark using GIMP

Download the excellent GIMP if not already done.

Create a new picture with transparent background

watermark.in.gimp.02 

Using the text tool, create a black or white title, you can also import/create an original logo.

watermark.in.gimp

Save the file using a .png or .gif extension, don’t use .jpg as it don’t handle transparency

Result:

watermark 

Prepare your Linux server

My script require you to install ImageMagick

ImageMagick®  is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.

ImageMagick install in OpenSuse

As root run

# zipper in ImageMagick

ImageMagick install in Debian

As root run

# apt-get install ImageMagick

Features

Support dir name and filename space

Support space in path and filename, not so easy as you think. Bash force me to use “” around variables to support space in path and use a while loop instead of a for loop to support space in filename.

Scan you directories

Scan your directories recursively for all pictures starting starting from the current directory (.).

Do not watermark all pictures

I don’t want to apply a watermark to all my pictures, I have decided to check against the size of the images and apply only if a threshold is reach (here all images bigger in width than 1024 pixels). The command identify allow you to retrieve the characteristics of any pictures

geometry=$(identify $each)

return for example

./desktop.jpg JPEG 1024x819 1024x819+0+0 DirectClass 8-bit 94.8613kb

Add a bit of Bash REGEX magic (since 2004 with bash 4.0) to correctly identify picture size

regex="([0-9]*)x([0-9]*)"

and voila! I can now use $height and $width in my function.

Limitations

Do not run the script twice or more

Do not run the script twice or more on same directory/sub directories, or the watermark will get darker and darker. The code do not check if any watermark already exist, and apply the same watermark over and over pictures that reach the threshold.

Installation

The script must be runnable

# chmod u+x watermark.sh

Configuration

open the file watermark.sh

# vi watermark.sh

and change all variables value at the top

Position of the Text Watermark

You can position the text using the following Gravity, possible values are: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast.

NorthWest North NorthEast
     
  Center  
     
SouthWest South SouthEast

If the -gravity option is present with NorthEast, East, or SouthEast gravity, it gives the distance leftward from the right edge of the image to the right edge of the cropping region. Similarly, if the -gravity option is present with SouthWest, South, or SouthEast gravity, the distance is measured upward between the bottom edges.

See more details HERE  

The bash script

Source Code

 

 

#!/bin/bash
echo "*******************************************"
echo "* Image Watermarking Script               *"
echo "* By Cedric Walter - www.waltercedric.com *"
echo "* Licence GNU/GPL v3 or later              *"
echo "*******************************************"
echo " "

BASEDIR=.

WATERMARK="/srv/www/vhosts/waltercedric.com/httpdocs/watermark.png"

Below this width no watermark will be apllied
MIN_PIC_HEIGHT=600
MIN_PIC_WIDTH=800

# NorthEast, East, or SouthEast gravity, it gives the distance leftward from the
# right edge of the image to the right edge of the cropping region. # Similarly, if the -gravity option is present with SouthWest, South, or SouthEast
# gravity, the distance is measured upward between the bottom edges. WATERMARK_POSITION=northeast Transparency percentage TRANSPARENCY_PERCENTAGE=15 normal user dont change below #this use bash regular expression capabilities regex="([0-9]*)x([0-9]*)" function applyWatermarkForExtension { find $BASEDIR -type f -name "$1" | while read each do geometry=$(identify "$each") echo $geometry if [[ ${geometry} =~ ${regex} ]]; then echo "$geometry matches" i=1 n=${BASH_REMATCH[*]} width=${BASH_REMATCH[$i]} let i++ height=${BASH_REMATCH[$i]} echo width=$width height=$height if [ $width -gt $MIN_PIC_WIDTH ];then echo "Working on $each ..." composite -gravity $WATERMARK_POSITION -dissolve $TRANSPARENCY_PERCENTAGE $WATERMARK "$each" "$each" 2> /dev/null echo "... Done!" fi fi done } add new pictures extensions here applyWatermarkForExtension "*.jpg" applyWatermarkForExtension "*.gif" applyWatermarkForExtension "*.png" applyWatermarkForExtension "*.jpeg" exit 0

Download

Download from my download section.

references

comments powered by Disqus

You might like also

Alternate method to install Joomla/Drupal on Synology NAS
If you want more control, want to install Joomla yourself or want to install any other CMS, you may also want to try this method. It require some basic knowledge about SSH / file transfer through. Main differences compare to the other method You won’t have any icons into the packages manager, You wont be able to stop this services, More prone to errors How to Install In the Control Panel of your Synology DSM NAS, go to “Web Services” …
2630 Days ago
Running Joomla! on Synology NAS
From small-and-medium business to individual users, Synology products offer a full range of choices to fulfill different needs, while sharing some similar characteristics- eco-friendly, quiet, and versatile. Pre requisites Download the Synology package Joomla-1.7.2.spk In the Control Panel of your Synology DSM NAS, go to “Web Services” and activate Enable Web Station Enable MySQL …
2630 Days ago
How to Solve a Problem with Joomla! jos_session
I was not seeing this error since at least 3 years: DB function failed with error number 1016 Can't open file: 'jos_session.MYI' (errno: 145) SQL=INSERT INTO `jos_session` ( `session_id`,`time`,`username`,`gid`,`guest`,`client_id` ) VALUES ( '4bc998b10d92bf4107976d0edacdbb26','1246725653','','0','1','0' ) It happen sometimes and cause are unknown. While it is quite disturbing to have no more access to Joomla! frontend or backend, the fix is quite easy. You must repair this table jos_session, If you have access to PhpMyAdmin Require an access to the Plesk/CPA panel. …
3300 Days ago
Digital watermarking with PHP and GD2
Digital watermarking is the process of possibly irreversibly embedding information into a digital signal. The signal may be audio, pictures or video, for example. If the signal is copied, then the information is also carried in the copy. In visible watermarking, the information is visible in the picture or video. Typically, the information is text or a logo which identifies the owner of the media. [Wikipedia] If you decide to go with an online watermarking, you can let watermark picture …
3374 Days ago
Joomlacomment 4.0 jQuery optimization
I did install yesterday evening the latest version of !JoomlaComment !JoomlaComment is one of the first extensions for Joomla,that let you comment under articles. The !JoomlaComment system can be installed on any joomla website within seconds! Make your website more interactive! Main Features: ajax-based captcha protection akismet support ubb code support threathed/nested comments multilanguage support mail, website input See more features here Joomla support templates, depending on which templates you use MTdefault-emotop, these templates MTxxxx use mootols 1.11 JQdefaut-emotop, these …
3399 Days ago
Optimize Joomla! site
I did optimize a bit my Joomla! homepage in the last few days. This has been achieved with Enabling Joomla module caching in all 3rd party module where it was missing/ not implemented at all, Starting to offload some assets (JavaScript) to faster hosting, Click read more to apply the same for your internet site. …
3405 Days ago
Joomla! php, FastCGI, blank page and duplicate header 'Status'
Since months, now I (understand also YOU) receive some blank page when browsing my Internet homepage. This strange behavior seems to occur only when having PHP running as FastCGI FastCGI is a protocol for interfacing interactive programs with a web server. FastCGI is a variation on the earlier Common Gateway Interface (CGI); FastCGI's main aim is to reduce the overhead associated with interfacing the web server and CGI programs, allowing a server to handle more web page requests at once. …
3623 Days ago
Skype me button for Joomla!
Thanks to Skype web integration, making a button to show your online status has never been so easier. Attention, you will also Somehow loose some privacy as anybody will be able to call you/chat with you Need to change your Skype privacy settings to show your status online learn more Create your html code Snippet by going to     Note: the online generator always create call URL, if you want to allow only chat, just alter slightly the URL, …
3629 Days ago
Joomla Components troubleshootings, support, help
Golden Rules Do not contact me first directly, these components are used worldwide (in the million range for some of them) and I can not help personally all people, even if I try... Use Google first Do yourself a favor, use Google, you'll get a response (nearly) at the speed of light, try to copy your error message or summarize your issue in keyword and append (or not) the name of the component like for example SecurityImages + require GD2 …
3777 Days ago
Install subversion on windows
In order to better develop for Joomla by having your own subversion local repositories. My second objective is to version different version of Joomla!/my components so I can run a continuous build strategy with XINC...but more on that later when I will have enough regression tests :-) Download the Subversion distribution for you operating system at: http://subversion.tigris.org/getting.html Subversion Binary Packages AIX openCollabNet Debian Debian Project apt-get install subversion HP-UX HP Porting Centre Fedora Fedora Project yum install subversion Mac OS …
3825 Days ago