I have made some edits in the code.
It now works with JPEG and PNG images, detects the type and the size of the watermark image automaticaly.
<?php
function get_ext($fname)
{
$arr = explode(".",$fname);
return $arr[sizeof($arr)-1];
}
function wm_pos ($img_size, $wm_size, $margin, $pos)
{
switch ($pos)
{
case 0: $rpos = $margin; break;
case 1: $rpos = $img_size/2 - $wm_size/2; break;
case 2: $rpos = $img_size - $margin - $wm_size; break;
default: $rpos = $img_size - $margin - $wm_size; break;
}
return $rpos;
}
//Most coding by semisphere
//http://gallery.menalto.com/index.php?name=PNphpBB2&file=viewtopic&t=4053&start=0
// A few lines by BY DJ AXION
// e-mail: DJ@the-expansion.com
// Enjoy this script!
######################################################################################################
## YOUR settings HERE
######################################################################################################
// watermark IMAGE settings
/*
NOTE
If the watermark is resized, transparency may contain lines and spots of your transparency color.
Try to put the right size from the beginning
*/
$position = array(2, 2); // position of the watermark image (x, y)
// 0,0 | 0,1 | 0,2
// 1,0 | 1,1 | 1,2
// 2,0 | 2,1 | 2,2
$opacity = 80; // 0 completely invisible
$margin_x = 10; // margin from the right in pixels (x axis)
$margin_y = 10; // margin from the bottom in pixels (y axis)
$quality = 100; // 100 is maximum quality
$watermark_image = "watermark.jpg"; // Full path to image
$transColor = array(0, 0, 0); // transparency color index in rgb
######################################################################################################
## DON'T EDIT BELLOW THIS LINE
## well, if you want to, you won't be busted
######################################################################################################
if (get_ext($watermark_image) == ('jpg' || 'jpeg'))
$watermark_type = "JPEG"; // JPEG
if (get_ext($watermark_image) == 'png')
$watermark_type = "PNG"; // PNG
// get the file we want to watermark
$get = $_GET["picturename"];
if (get_ext($get) == ('jpg' || 'jpeg'))
$image_type = JPEG;
if (get_ext($get) == 'png')
$image_type = PNG;
eval ("\$file = ImageCreateFrom$image_type(\$get);");
// get the image details and create an image
$image_width = imagesx($file);
$image_height = imagesy($file);
$image = $file;
//if ((!preg_match("/thumb_/i", "$picturename")) && ($image_width > 250))
if ($image_width > 250)
{
// get the watermark details, and open it
$watermark_info = getImageSize($watermark_image);
eval ("\$watermark = ImageCreateFrom$watermark_type(\$watermark_image);");
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// calculate scale of watermark and create scaled watermark
$scaled_watermark = imageCreateTrueColor($watermark_width, $watermark_height);
// resize the watermark to the new scale
imageCopyResampled($scaled_watermark, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, $watermark_info[0], $watermark_info[1]);
// set the transparent color ($transColor)
$transparentColor = imagecolorallocate ($scaled_watermark, $transColor[0], $transColor[1], $transColor[2]);
imagecolortransparent($scaled_watermark, $transparentColor);
// add the watermark to the image
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 0), wm_pos($image_height, $watermark_height, $margin_y, 0), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Upper Left
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 0), wm_pos($image_height, $watermark_height, $margin_y, 1), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Upper Center
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 0), wm_pos($image_height, $watermark_height, $margin_y, 2), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Upper Right
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 1), wm_pos($image_height, $watermark_height, $margin_y, 0), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Center Left
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 1), wm_pos($image_height, $watermark_height, $margin_y, 1), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Center Center
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 1), wm_pos($image_height, $watermark_height, $margin_y, 2), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Center Right
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 2), wm_pos($image_height, $watermark_height, $margin_y, 0), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Lower Left
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 2), wm_pos($image_height, $watermark_height, $margin_y, 1), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Lower Center
// ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, 2), wm_pos($image_height, $watermark_height, $margin_y, 2), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Lower Right
ImageCopyMerge($image, $scaled_watermark, wm_pos($image_width, $watermark_width, $margin_x, $position[0]), wm_pos($image_height, $watermark_height, $margin_y, $position[1]), 0, 0, $watermark_info[0], $watermark_info[1], $opacity); //Using the "wm_pos" function & "position" array
}
// send out a header
header("content-type:image/$image_type");
// send the image
eval ("image$image_type (\$image,'',\$quality);");
// clean up
imagedestroy($image);
?>
The opacy works onli when the watermark image is a PNG file.