mrheff Posted March 2, 2007 Share Posted March 2, 2007 Hi guys im running a Watermark script thought it was all going ok, till i realised, i havent sent anything on the online version, silly me i TRUSTED it, what an idiot, Anyway, i thought it might be down to a problem with the GD on the server, howerver ive checked the phpinfo and everything is the same, identical settings, Heres the code, you need to give it a folder with an image in it to watermark in root/watermarks/ and a foler root/results/ to output to. if you can think of what the prob could be hit me up. <?php ob_start(); $disp_width_max=150; // used when displaying watermark choices $disp_height_max=80; // used when displaying watermark choices $edgePadding=0; // used when placing the watermark near an edge $quality=100; // used when generating the final image $default_watermark='carbontall.png'; // the default image to use if no watermark was chosen if(isset($_POST['process'])){ // an image has been posted, let's get to the nitty-gritty if(isset($_FILES['watermarkee']) && $_FILES['watermarkee']['error']==0){ // be sure that the other options we need have some kind of value if(!isset($_POST['save_as'])) $_POST['save_as']='jpeg'; if(!isset($_POST['v_position'])) $_POST['v_position']='bottom'; if(!isset($_POST['h_position'])) $_POST['h_position']='right'; if(!isset($_POST['wm_size'])) $_POST['wm_size']='1'; if(!isset($_POST['watermark'])) $_POST['']=$default_watermark; // file upload success $size=getimagesize($_FILES['watermarkee']['tmp_name']); if($size[2]==2 || $size[2]==3){ // it was a JPEG or PNG image, so we're OK so far $original=$_FILES['watermarkee']['tmp_name']; $target_name=date('YmdHis').'_'. // if you change this regex, be sure to change it in generated-images.php:26 preg_replace('`[^a-z0-9-_.]`i','',$_FILES['watermarkee']['name']); $target=dirname(__FILE__).'/results/'.$target_name; $watermark=dirname(__FILE__).'/watermarks/'.$_POST['watermark']; $wmTarget=$watermark.'.tmp'; $origInfo = getimagesize($original); $origWidth = $origInfo[0]; $origHeight = $origInfo[1]; $waterMarkInfo = getimagesize($watermark); $waterMarkWidth = $waterMarkInfo[0]; $waterMarkHeight = $waterMarkInfo[1]; // watermark sizing info if($_POST['wm_size']=='larger'){ $placementX=0; $placementY=0; $_POST['h_position']='center'; $_POST['v_position']='center'; $waterMarkDestWidth=$waterMarkWidth; $waterMarkDestHeight=$waterMarkHeight; // both of the watermark dimensions need to be 5% more than the original image... // adjust width first. if($waterMarkWidth > $origWidth*1.05 && $waterMarkHeight > $origHeight*1.05){ // both are already larger than the original by at least 5%... // we need to make the watermark *smaller* for this one. // where is the largest difference? $wdiff=$waterMarkDestWidth - $origWidth; $hdiff=$waterMarkDestHeight - $origHeight; if($wdiff > $hdiff){ // the width has the largest difference - get percentage $sizer=($wdiff/$waterMarkDestWidth)-0.05; }else{ $sizer=($hdiff/$waterMarkDestHeight)-0.05; } $waterMarkDestWidth-=$waterMarkDestWidth * $sizer; $waterMarkDestHeight-=$waterMarkDestHeight * $sizer; }else{ // the watermark will need to be enlarged for this one // where is the largest difference? $wdiff=$origWidth - $waterMarkDestWidth; $hdiff=$origHeight - $waterMarkDestHeight; if($wdiff > $hdiff){ // the width has the largest difference - get percentage $sizer=($wdiff/$waterMarkDestWidth)+0.05; }else{ $sizer=($hdiff/$waterMarkDestHeight)+0.05; } $waterMarkDestWidth+=$waterMarkDestWidth * $sizer; $waterMarkDestHeight+=$waterMarkDestHeight * $sizer; } }else{ $waterMarkDestWidth=round($origWidth * floatval($_POST['wm_size'])); $waterMarkDestHeight=round($origHeight * floatval($_POST['wm_size'])); if($_POST['wm_size']==1){ $waterMarkDestWidth-=2*$edgePadding; $waterMarkDestHeight-=2*$edgePadding; } } // OK, we have what size we want the watermark to be, time to scale the watermark image resize_png_image($watermark,$waterMarkDestWidth,$waterMarkDestHeight,$wmTarget); // get the size info for this watermark. $wmInfo=getimagesize($wmTarget); $waterMarkDestWidth=$wmInfo[0]; $waterMarkDestHeight=$wmInfo[1]; $differenceX = $origWidth - $waterMarkDestWidth; $differenceY = $origHeight - $waterMarkDestHeight; // where to place the watermark? switch($_POST['h_position']){ // find the X coord for placement case 'left': $placementX = $edgePadding; break; case 'center': $placementX = round($differenceX / 2); break; case 'right': $placementX = $origWidth - $waterMarkDestWidth - $edgePadding; break; } switch($_POST['v_position']){ // find the Y coord for placement case 'top': $placementY = $edgePadding; break; case 'center': $placementY = round($differenceY / 2); break; case 'bottom': $placementY = $origHeight - $waterMarkDestHeight - $edgePadding; break; } if($size[2]==3) $resultImage = imagecreatefrompng($original); else $resultImage = imagecreatefromjpeg($original); imagealphablending($resultImage, TRUE); $finalWaterMarkImage = imagecreatefrompng($wmTarget); $finalWaterMarkWidth = imagesx($finalWaterMarkImage); $finalWaterMarkHeight = imagesy($finalWaterMarkImage); imagecopy($resultImage, $finalWaterMarkImage, $placementX, $placementY, 0, 0, $finalWaterMarkWidth, $finalWaterMarkHeight ); if($size[2]==3){ imagealphablending($resultImage,FALSE); imagesavealpha($resultImage,TRUE); imagepng($resultImage,$target,$quality); }else{ imagejpeg($resultImage,$target,$quality); } imagedestroy($resultImage); imagedestroy($finalWaterMarkImage); // display resulting image for download ?> <div> <h1>Watermarked Image</h1> <p> <a href="<?php echo $_SERVER['PHP_SELF'] ?>">Back To Form</a> <a href="generated-images.php">View Previously Watermarked Images</a> </p> <p> Below is the resulting watermarked image based on your input on the submission form. To save the image, right-click (control click on a Mac) and select the option similar to "Save Image As..." You can then save the image to your harddrive when prompted for a save location. </p> <p> Watermarked images are also saved on this system. You can view and/or delete watermarked images <a href="generated-images.php">here</a>. </p> <p align="center"> <img src="results/<?php echo $target_name ?>?id=<?php echo md5(time()) ?>" alt="" /> </p> <hr> </div> <?php unlink($wmTarget); }else{ ?> <div> <h1>Watermarked Image</h1> <p class="errorMsg">The image uploaded was not a JPEG or PNG image.</p> </div> <?php } }else{ ?> <div> <h1>Watermarked Image</h1> <p class="errorMsg">Unable to upload the image to watermark.</p> </div> <?php } }else{ // no image posted, show form for options ?> <div> <h1>Watermark A JPEG or PNG Image</h1> <p> <a href="generated-images.php">View Previously Watermarked Images</a> </p> <p> please ensure png-24 for correct proccessing. </p> <form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <table cellpadding="2" cellspacing="0" border="0"> <tr> <th width="50%"> Image to WaterMark: <p>(72dpi, RGB JPEG/PNG)</p> </th> <td width="50%"> <input type="file" name="watermarkee" /> </td> </tr> <tr> <th valign="top"> Choose Watermark:<br /> <p> watermarks placed in directory. </p> </th> <td valign="top"> <table cellpadding="2" cellspacing="0" border="0"> <?php $dir=dirname(__FILE__).'/watermarks'; if (is_dir($dir)) { if ($dh = opendir($dir)) { $i=0; $watermarks=array(); while (($file = readdir($dh)) !== FALSE) { if(!preg_match('`\.png$`',$file)) continue; $watermarks[]=$file; } closedir($dh); // now sort the array according to file name asort($watermarks); foreach($watermarks as $file){ // restrain display width $size=getimagesize($dir.'/'.$file); if($size[0] > $disp_width_max && $disp_width_max){ $reduction=$disp_width_max / $size[0]; $size[0]=$size[0]*$reduction; $size[1]=$size[1]*$reduction; $size[3]=sprintf('width="%d" height="%d"',$size[0],$size[1]); // also restrain the height after a resize if($size[1] > $disp_height_max && $disp_height_max){ $reduction=$disp_height_max / $size[1]; $size[0]=$size[0]*$reduction; $size[1]=$size[1]*$reduction; $size[3]=sprintf('width="%d" height="%d"',$size[0],$size[1]); } } // also restrain the height if($size[1] > $disp_height_max && $disp_height_max){ $reduction=$disp_height_max / $size[1]; $size[0]=$size[0]*$reduction; $size[1]=$size[1]*$reduction; $size[3]=sprintf('width="%d" height="%d"',$size[0],$size[1]); } echo ' <tr>',"\n", ' <td>',"\n", ' <input type="radio" value="',$file,'" name="watermark" /> ', '<img src="watermarks/',$file,'" ',$size[3],' alt="" />',"\n", ' </td>',"\n", ' </tr>',"\n"; $i++; } if($i==0){ // no images at this time echo ' <tr>',"\n", ' <td>',"\n", ' There are currently no watermark images to use with this the system on this server.',"\n", ' </td>',"\n", ' </tr>',"\n"; } } } ?> </table> </td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" name="process" value="Watermark Image" /> </td> </tr> </table> </form> </div> <?php } $page_display=ob_get_clean(); function resize_png_image($img,$newWidth,$newHeight,$target){ $srcImage=imagecreatefrompng($img); if($srcImage==''){ return FALSE; } $srcWidth=imagesx($srcImage); $srcHeight=imagesy($srcImage); $percentage=(double)$newWidth/$srcWidth; $destHeight=round($srcHeight*$percentage)+1; $destWidth=round($srcWidth*$percentage)+1; if($destHeight > $newHeight){ // if the width produces a height bigger than we want, calculate based on height $percentage=(double)$newHeight/$srcHeight; $destHeight=round($srcHeight*$percentage)+1; $destWidth=round($srcWidth*$percentage)+1; } $destImage=imagecreatetruecolor($destWidth-1,$destHeight-1); if(!imagealphablending($destImage,FALSE)){ return FALSE; } if(!imagesavealpha($destImage,TRUE)){ return FALSE; } if(!imagecopyresampled($destImage,$srcImage,0,0,0,0,$destWidth,$destHeight,$srcWidth,$srcHeight)){ return FALSE; } if(!imagepng($destImage,$target)){ return FALSE; } imagedestroy($destImage); imagedestroy($srcImage); return TRUE; } echo '<?xml version="1.0" encoding="iso-8859-1"?>',"\n"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Watermarking JPEG and PNG Images with PHP and GD2</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="description" content="A PHP implementation to watermark JPEG or PNG images with a PNG-24 image with alpha transparency." /> <style type="text/css"> th{ text-align: right; font-weight: bold; } th p{ font-weight: normal; font-size: 75%; color: #c00; background-color: transparent; } </style> </head> <body> <div> <?php echo $page_display ?></div> <div><h1><a href="batch.php">Batch Upload</a></h1> </div> </body> </html> try it local, and up and see what you think. What a puzzle. Link to comment https://forums.phpfreaks.com/topic/40853-only-on-local-but-we-are-running-everything-the-same-gd2-probs/ Share on other sites More sharing options...
monk.e.boy Posted March 2, 2007 Share Posted March 2, 2007 why don't you make a little test page that shows the error. I can't be bothered to read so much code monk.e.boy Link to comment https://forums.phpfreaks.com/topic/40853-only-on-local-but-we-are-running-everything-the-same-gd2-probs/#findComment-197834 Share on other sites More sharing options...
mrheff Posted March 5, 2007 Author Share Posted March 5, 2007 thanks for getting back to me monk.e.boy, it ended up being a stupid noowb error, i had to give the correct permissions on the watermarks folder aswell as the destinantion folder. eedjit or what, let that be a lesson to all us newbies, think of the simplest problem first and work from there..... lol thanks guys, heff. Link to comment https://forums.phpfreaks.com/topic/40853-only-on-local-but-we-are-running-everything-the-same-gd2-probs/#findComment-199965 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.