This script uploads an image, watermarks it, and also creates a thumbnail of the image. I've edited it to ignore the watermarking of GIF files since GD library breaks the animation when watermarked. It watermarks the appropriate image types just fine, but when a GIF is uploaded, it doesn't stay animated even though it's not watermarked. Here's the full code:
<?php
if(isset($_POST))
{
$Big = 980
$Small = 400;
$ThumbPrefix = "thumb_";
$DestinationDirectory = '../folder/';
$Quality = 100;
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
die();
}
if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name']))
{
die('Error!');
}
$Number = substr(str_shuffle(MD5(microtime())), 0, 10);
$ImageName = str_replace(' ','-',strtolower($_FILES['ImageFile']['name']));
$ImageSize = $_FILES['ImageFile']['size'];
$TempSrc = $_FILES['ImageFile']['tmp_name'];
$ImageType = $_FILES['ImageFile']['type'];
switch(strtolower($ImageType))
{
case 'image/png':
$CreatedImage = imagecreatefrompng($_FILES['ImageFile']['tmp_name']);
break;
case 'image/gif':
$CreatedImage = imagecreatefromgif($_FILES['ImageFile']['tmp_name']);
break;
case 'image/jpeg':
case 'image/pjpeg':
$CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']);
break;
default:
die('Unsupported File!');
}
list($CurWidth,$CurHeight)=getimagesize($TempSrc);
$ImageExt = substr($ImageName, strrpos($ImageName, '.'));
$ImageExt = str_replace('.','',$ImageExt);
$ImageName = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName);
$NewName = $Number.'-'.$ImageName.'.'.$ImageExt;
$url = 'http://'.@$_SERVER['HTTP_HOST'].strtr(dirname(dirname($_SERVER['SCRIPT_NAME'])), '\\', '/').'';
$thumb_ImageName = $DestinationDirectory.$ThumbPrefix.$NewName;
$ImageName = $DestinationDirectory.$NewName;
if(resizeImage2($CurWidth,$CurHeight,$Small,$thumb_ImageName,$CreatedImage,$Quality,$ImageType))
{
if(!resizeImage($CurWidth,$CurHeight,$MainImageSize,$ImageName,$CreatedImage,$Quality,$ImageType))
{
echo 'Error';
}
$variable = <<<IMG
<p>Image Preview</p></br>
<div class="up">
<img src="$url/folder/$NewName">
<label onclick="document.getElementById('content').value = '$url/folder/$ThumbPrefix$NewName';document.getElementById('extra').value = '$url/folder/$NewName';document.getElementById('imgprev').src = '$url/folder/$ThumbPrefix$NewName';" class="img-submit" for="upload"></label>
</div>
IMG;
echo $variable;
}else{
die('Error');
}
}
function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
//Check Image size is not 0
if($CurWidth <= 0 || $CurHeight <= 0)
{
return false;
}
$NewCanves = imagecreatetruecolor($CurWidth, $CurHeight);
$watermark = 'watermark/watermark.png';
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $CurWidth, $CurHeight, $CurWidth, $CurHeight))
{
switch(strtolower($ImageType))
{
case 'image/png':
imagepng($NewCanves,$DestFolder);
break;
case 'image/gif':
imagegif($NewCanves,$DestFolder);
break;
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($NewCanves,$DestFolder,$Quality);
break;
default:
return false;
}
if (($ImageType =="image/pjpeg" OR $ImageType =="image/jpeg" OR $ImageType =="image/jpg"))
{
$watermark = imagecreatefrompng($watermark);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$watermark_x = ($CurWidth-$watermark_width);
$watermark_y = ($CurHeight-$watermark_height)/2;
imagecopy($NewCanves, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height);
}
imagejpeg($NewCanves,$DestFolder,$Quality);
if(is_resource($NewCanves)) {imagedestroy($NewCanves);}
return true;
}
}
function resizeImage2($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
if($CurWidth <= 0 || $CurHeight <= 0)
{
return false;
}
//Construct a proportional size of new image
$ImageScale = min($MaxSize/$CurWidth, $MaxSize/$CurWidth);
$Width = ceil($ImageScale*$CurWidth);
$Height = ceil($ImageScale*$CurHeight);
$NewCanves = imagecreatetruecolor($Width, $Height);
$watermark = 'watermark/watermark.png';
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $Width, $Height, $CurWidth, $CurHeight))
{
switch(strtolower($ImageType))
{
case 'image/png':
imagepng($NewCanves,$DestFolder);
break;
case 'image/gif':
imagegif($NewCanves,$DestFolder);
break;
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($NewCanves,$DestFolder,$Quality);
break;
default:
return false;
}
imagejpeg($NewCanves,$DestFolder,$Quality);
if(is_resource($NewCanves)) {imagedestroy($NewCanves);}
return true;
}
}
I noticed that if I use:
if(!move_uploaded_file($_FILES['ImageFile']['tmp_name'], $DestinationDirectory.$NewImageName ))
instead of:
if(!resizeImage($CurWidth,$CurHeight,$MainImageSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType))
then the GIFs will stay animated, but then it doesn't watermark anything anymore. I'm throughly confused. My knowledge of PHP is very limited. Does anyone have any ideas? Thanks.