After spending a lot of time looking for the perfect solution to place a watermark on specific WordPress images I think it’s worth sharing.
I need a watermark on a specific image size. I don’t want to use it on the small thumbnails, so it’s not useful to render it on upload.
My solution is to use WP-Thumb and generate the images on demand (of course caching is possible).
In this case I use Advanced Custom Fields to upload the image so I have an array with image informations:
Array ( [id] => 43 [alt] => [title] => imagetitle => [description] => [url] => http://yourdomain.com/wp-content/uploads/2013/07/image.jpg [width] => 640 [height] => 480 ... )
in my theme there is an image called watermark.png which should be placed on the top right of the my resized image. I use this function in my functions.php (the image size is theme specific)
function watermark_image($pic){ if($pic['width']>$pic['height']){ $w=455; $h=340; }else{ $h=340; $w=round($h/$pic['height']*$pic['width']); } $image = new WP_Thumb( $pic['url'], array( 'width' => $w, 'height' => $h, 'cache' => false, 'return' => 'path', 'watermarking_options' => array( 'mask' => get_template_directory_uri().'/images/watermark.png', 'position' => 'top,right', 'padding' => 0 ) ) ); return $image->getCacheFileUrl(); }
and this is how you call it:
$pic = get_field('picture'); echo '<img src="'.watermark_image( $pic ).'" alt="'.$pic['alt'].'" title="'.$pic['title'].'">';