Jump to content

Only on local??? but we are running everything the same!!!!! GD2 probs.


mrheff

Recommended Posts

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.

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.

 

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.