create a pdf preview from images and add 66% noise each page

I have a php page where people can preview documents that they can purchase if they want to.

The preview should consist of one image file per document page. each image should show the top 33% of the page. below that there should be black noise with tex on there ("Preview")

Could someone provide a code example on how to do add the 66% noise ?
This is the code I have created so far :
 
       /**
	 * 
	 */
	public static function createPreview($_file, $_noise_image) {
		// the preview
		$preview_file = dirname($_file) . "/" . "preview_" .  basename($_file);		
		// create handle for new PDF document
		$pdf_handler = pdf_new();		
		// open a file
		pdf_open_file($pdf_handler, $preview_file);
		// insert the previews
		$images = new Imagick($_file);
		//
		foreach ($images as $k => $image) {
			$preview_jpeg =  dirname($_file) . "/" . "tmp_page" . $k . '_.jpg';			
			$image->setImageFormat("jpg");	
			$image->writeImage($preview_jpeg);	
			// start a new page (A4)
			pdf_begin_page($pdf_handler, 595, 842);
			$pdfimage = pdf_load_image($pdf_handler, "jpeg", $preview_jpeg, "");	
			pdf_place_image($pdf_handler, $pdfimage, 0, 0, 1);		
					
			// place the noise image : TODO
			
			// end page (A4)
			pdf_end_page($pdf_handler);		
			// clean
			@unlink($preview_jpeg);
			//$image->clear();
			//$image->destroy();
		}
		// close and save file
		pdf_close($pdf_handler);
		//
		return $preview_file;
	}

Open in new window

SWB-ConsultingAsked:
Who is Participating?
 
XorlevConnect With a Mentor Commented:
Glad to help. If you found it useful, please accept the solution so I can stay on the site. :)
0
 
XorlevCommented:
I've written up an example here of how to use ImageMagick to get, effect, and then combine two images with ImageMagick. The effect is actually quite neat. In my example I use a simple blur, but you can change it to add noise as well. I've included samples for both (one commented out).

http://us.php.net/manual/en/function.imagick-blurimage.php
http://us.php.net/manual/en/function.imagick-addnoiseimage.php

When it comes to noise, I found the settings below the only workable ones for "noise". I liked the blur better.
imagick::NOISE_IMPULSE
imagick::NOISE_GAUSSIAN
imagick::NOISE_LAPLACIAN
imagick::NOISE_POISSON

In your case, you'd use something like this snippit right before these lines:
                        $image->setImageFormat("jpg");  
                        $image->writeImage($preview_jpeg);      
                        // start a new page (A4)

Enjoy.

// Get original size of image
$height = $image->getImageHeight();
$width = $image->getImageWidth();
 
// We need an overlay ~66% of the image
$o_height = floor(2*($height) / 3);
 
// Grab region of the image and make into a new Imagick class
$im_overlay = $image->getImageRegion($width, $o_height, 0, $height - $o_height);
 
// Do obfuscating effect.
$im_overlay->blurImage(5,6);
//$im_overlay->addNoiseImage(imagick::NOISE_LAPLACIAN);
 
// Overlay images
$image->compositeImage($im_overlay, imagick::COMPOSITE_OVER, 0, $height - $o_height);
 
// Write out image, go on.
$image->setImageFormat("jpg");  
$image->writeImage($preview_jpeg);      
// start a new page (A4)
 
?>

Open in new window

0
 
XorlevCommented:
I almost forgot the text overlay. Just add this after:
$image->compositeImage($im_overlay, imagick::COMPOSITE_OVER, 0, $height - $o_height);

and before
// Write out image, go on.
// Do preview text
$draw = new ImagickDraw();
 
// Set font soze
$draw->setFontSize(52);
 
// Align text to center
$draw->setTextAlignment(imagick::ALIGN_CENTER);
 
// Initialize color class
$white = new ImagickPixel();
$white->setColor('white');
 
// Set text color
$draw->setFillColor($white);
 
// Draw text in middle of image (within 66%)
$draw->annotation(floor($width / 2), floor($height / 2), 'PREVIEW');
 
// Overlay text
$image->drawImage($draw);

Open in new window

0
 
SWB-ConsultingAuthor Commented:
excellent solution and comments, thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.