Watermarks as a first-line content protection asset is required for almost any celling or commercial website. Most simple solution for this is the use of a watermark adding function for all image uploads. Watermarks, however, are often required for websited already having tens or hundreds uploads. In such cases you can use simple yet effective PHP/Apache solution.
First off you need to create a watermark, say PNG-24 watermark.png and place it in the website root folder.
Second off, create watermark.php file with the following contents:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php // Insert watermarks on the fly // Requested file path $path = $_GET [ 'path' ]; $realpath = realpath ( '../../../' . $path ); // Check path and extension if ( strpos ( $realpath , $_SERVER [ 'DOCUMENT_ROOT' ]) === FALSE || !preg_match( '#\.(gif|jpeg|jpg|png)$#i' , $path )) { header( 'HTTP/1.1 403 Forbidden' ); echo '<h1>Forbidden</h1>' ; exit ; } // Load the image $image = imagecreatefromstring( file_get_contents ( $realpath )); $w = imagesx( $image ); $h = imagesy( $image ); // Load the watermark $watermark = imagecreatefrompng( 'watermark.png' ); $ww = imagesx( $watermark ); $wh = imagesy( $watermark ); // Insert watermark to the right bottom corner imagecopy( $image , $watermark , $w - $ww , $h - $wh , 0, 0, $ww , $wh ); // ... or to the image center // imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh); // Send the image header( 'Content-type: image/jpeg' ); imagejpeg( $image ,null,95); exit (); ?> |
Last thing to do is adding rewrite rule for images:
1 2 |
RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^datas/photos/page_([0-9]+)\.(gif|jpeg|jpg|png)$ watermark.php [QSA,NC] |
This rule would add watermarks to all images placed in the datas/photos/ folder and complying with the specified mask.
For the servers that do not support mod_rewrite you can use Watermark plugin by Trustmaster.
Hello, thanks for sharing.
When i use this, i get always the forbiden message
In my case i have my path is
/home/aferreir/public_html/demo/uploaded_files/classified_img/ is the images folder
the watermak.php file is at
/home/aferreir/public_html/demo/watermark.php
$path
=
$_GET
[
'path'
]; at path i must insert
'uploaded_files/classified_img/'
$realpath
=
realpath
(
'../../../'
.
$path
);
at realpath i must insert
'/home/aferreir/public_html/demo/
'