watermarking, transparency problem

Need help with Photoshop, the GIMP, Illustrator, or others? Want to show off your work? Looking for advice on your newest Flash stuff?

Moderator: General Moderators

Post Reply
josh
DevNet Master
Posts: 4872
Joined: Wed Feb 11, 2004 3:23 pm
Location: Palm beach, Florida

watermarking, transparency problem

Post by josh »

I have a 200 X 200 pixel watermark, and a 4,000 X 4,000 destination image. I want to copy the watermark ontop of the destination image and stretch the watermark, so I resample the watermark:

Code: Select all

$watermark = imagecreatetruecolor($width_photo_orig, $height_photo_orig);
$watermark_orig = imagecreatefrompng('watermark.png');
imageAlphaBlending($watermark_orig, false);
imageSaveAlpha($watermark_orig, true);
imagecopyresampled($watermark, $watermark_orig, 0, 0, 0, 0, $width_photo_orig, $height_photo_orig, $width_water_orig, $height_water_orig);
Problem is now the watermark is black where it should be transparent because imagecreatetruecolor creates a black image. Then the transparency was simply lost, now watermarking this image creates a black image with a watermark overriding my original photo. Is there a way for imagecreatetruecolor to produce a transparent image to start with, or for imagecopyresample to preserve transparency?
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Post by onion2k »

It sounds a bit mad, but you need to set imageAlphaBlending($watermark_orig, true); rather than false, and remove the imageSaveAlpha($watermark_orig, true); line altogether.

Code: Select all

<?php

	$file = "wm.jpg"; // Original image to have watermark applied to it.
	$wm = "watermark.png"; // Watermark image

	$image = imagecreatefromjpeg($file);
	imagealphablending($image,true); // Tell PHP to use alpha blending when the destination image is $image
	
	$wm_image = imagecreatefrompng($wm);
	imagecopyresampled($image,$wm_image,0,0,0,0,imagesx($image),imagesy($image),imagesx($wm_image),imagesy($wm_image));

	header("Content-type: image/jpeg");
	imagejpeg($image);

?>
Obviously that code applies the watermark directly to the image instead of going via an image created with imagecreatetruecolour(). If you really need to do that I have an imagecreatetruecolortransparent() function that should do the job ..

Code: Select all

function imagecreatetruecolortransparent($x,$y) {
		$i = imagecreatetruecolor($x,$y);
		$b = imagecreatefromstring(base64_decode(blankpng()));
		imagealphablending($i,false);
		imagesavealpha($i,true);
		imagecopyresized($i,$b,0,0,0,0,$x,$y,imagesx($b),imagesy($b));
		return $i;
	}

	function blankpng() {

		$c  = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m";
		$c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg";
		$c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN";
		$c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ";
		$c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA";
		$c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII=";

		return $c;

	}

	$image = imagecreatetruecolortransparent(200,200);
	
	header("Content-type: image/png");
	imagepng($image);
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Post by onion2k »

If you don't fancy resizing the watermark you could tile it over the image instead..

Code: Select all

<?php

	$file = "wm.jpg";
	$wm = "watermark.png";

	$image = imagecreatefromjpeg($file);
	imagealphablending($image,true);

	$wm_image = imagecreatefrompng($wm);

	imageSetTile($image,$wm_image);
	imagefilledrectangle($image,0,0,imagesx($image),imagesy($image),IMG_COLOR_TILED);

	header("Content-type: image/jpeg");
	imagejpeg($image);

?>
Sadly you can't use imagefill() unless your image is blank to start with.. coz it's a fill and only goes up to boundaries..
johnrishaboye
Forum Newbie
Posts: 1
Joined: Tue Apr 24, 2012 7:17 am

Re: watermarking, transparency problem

Post by johnrishaboye »

nice informative post i like it....
Post Reply