Below is how I have watermarked images excluding thumbnails with the text ".thumb." and ".highlight." in the name of the image files.
Contents of ".htaccess" :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !\.thumb\.|\.highlight\.
Rewri teRule ^.*[Jj][Pp][Gg]$|.*[Gg][Ii][Ff ]$|.*[Pp][Nn][Gg]$ watermark.php?%{REQUEST_FILENA ME}
Contents of "watermark.php" :
<?php
// watermark.gif should have a transparent background.
$watermark = "watermark.gif";
$image = $QUERY_STRING;
if (empty($image)) die();
if (!file_exists($image)) {
header("404 Not Found");
echo "File Not Found."; die();
}
$outputType = getFileType($image);
watermar k($image, $watermark, $outputType);
/**
Outputs the image $source with $watermark in the lower right corner.
@param $source the source image
@param $watermark the watermark to apply
@param $outputType the type to output as (png, jpg, gif, etc.)
defaults to the image type of $source if left blank
*/
function watermark($source, $watermark, $outputType="") {
$sourceType = getFileType($source);
$watermarkType = getFileType($watermark);
if (empty($outputType)) $outputType = $sourceType;
if ($outputType == "gif") $outputType = "png"; // Okay to remove
header("Content-type:image/$ou tputType");
// Derive function names
$createSource = "ImageCreateFrom".strtoupper($ sourceType);
$showImage = "Image".strtoupper($outputType );
$createWatermark = "ImageCreateFrom".strtoupper($ watermarkType);
// Load original and watermark to memory
$output = $createSource($source);
$logo = $createWatermark($watermark);
ImageAlphaBlending($output, true);
// Find proper coordinates so watermark will be in the lower right corner
$x = ImageSX($output) - ImageSX($logo);
$y = ImageSY($output) - ImageSY($logo);
// Display
ImageCopy($output, $logo, $x, $y, 0, 0, ImageSX($logo), ImageSY($logo));
$showImage($output);
// Purge
ImageDestroy($output);
ImageDestroy($logo);
}
functi on getFileType($string) {
$type = strtolower(eregi_replace("^(.* )\.","",$string));
if ($type == "jpg") $type = "jpeg";
return $type;
}
?>
If using ImageCreateFromPng,PHP and GD do not recognize grayscale/alpha images.
So if you use grayscale images with transparency between 0% and 100%, then save the image as RGB.