PHP filigran

2 Cevap php

i bir filigran oluşturmak için bu kodu kullanıyorum.

    $image = '1.jpg';
	$overlay = 'stamp.png';
	$opacity = "20";
	if (!file_exists($image)) {
		die("Image does not exist.");
	}
	// Set offset from bottom-right corner
	$w_offset = 0;
	$h_offset = 100;
	$extension = strtolower(substr($image, strrpos($image, ".") + 1));
	// Load image from file
	switch ($extension)
	{
		case 'jpg':
		$background = imagecreatefromjpeg($image);
		break;
		case 'jpeg':
		$background = imagecreatefromjpeg($image);
		break;
		case 'png':
		$background = imagecreatefrompng($image);
		break;
		case 'gif':
		$background = imagecreatefromgif($image);
		break;
		default:
		die("Image is of unsupported type.");
	}
	// Find base image size
	$swidth = imagesx($background);
	$sheight = imagesy($background);
	// Turn on alpha blending
	imagealphablending($background, true);
	// Create overlay image
	$overlay = imagecreatefrompng($overlay);
	// Get the size of overlay
	$owidth = imagesx($overlay);
	$oheight = imagesy($overlay);
	// Overlay watermark
	imagecopymerge($background, $overlay, $swidth - $owidth - $w_offset, $sheight - $oheight - $h_offset, 0, 0, $owidth, $oheight, $opacity);
	imagejpeg($background,$image);
	// Destroy the images
	imagedestroy($background);
	imagedestroy($overlay);

the png image contains a text with all other region as transparent. but when i execute this code , it applys the png over jpg, but the transparecy is not maintained of the png. it shows in a box.

nasıl ben bu başarmak olabilir. Bir png transaparent bölümünü içeriyorsa, yani bu .... bu bölümünde aşağıda görüntü göstermek gerekir?

2 Cevap

imagecopy ile imagecopymerge değiştirilmesi sorunu çözüldü. Burada yeni kodu

function watermark($image){
	$overlay = '../../../photos/photosets/stamp.png';
	$opacity = "20";
	if (!file_exists($image)) {
		die("Image does not exist.");
	}
	// Set offset from bottom-right corner
	$w_offset = 0;
	$h_offset = 100;
	$extension = strtolower(substr($image, strrpos($image, ".") + 1));
	// Load image from file
	switch ($extension)
	{
		case 'jpg':
		$background = imagecreatefromjpeg($image);
		break;
		case 'jpeg':
		$background = imagecreatefromjpeg($image);
		break;
		case 'png':
		$background = imagecreatefrompng($image);
		break;
		case 'gif':
		$background = imagecreatefromgif($image);
		break;
		default:
		die("Image is of unsupported type.");
	}
	// Find base image size
	$swidth = imagesx($background);
	$sheight = imagesy($background);
	// Turn on alpha blending
	imagealphablending($background, true);
	// Create overlay image
	//$overlay = imagecreatefrompng($overlay);
	// Get the size of overlay
	$owidth = imagesx($overlay);
	$oheight = imagesy($overlay);

	$photo = imagecreatefromjpeg($image);
	$watermark = imagecreatefrompng($overlay);
             // This is the key. Without ImageAlphaBlending on, the PNG won't render correctly.
	imagealphablending($photo, true);
            // Copy the watermark onto the master, $offset px from the bottom right corner.
	$offset = 10;
	imagecopy($photo, $watermark, imagesx($photo) - imagesx($watermark) - $offset, imagesy($photo) - imagesy($watermark) - $offset, 0, 0, imagesx($watermark), imagesy($watermark));
            // Output to the browser
	header("Content-Type: image/jpeg");
	imagejpeg($photo,$image);
	// Overlay watermark
	// Destroy the images
	imagedestroy($background);
	imagedestroy($overlay);
}

Jpg formatında saydamlığı desteklemez, bu nedenle kavramsal size sahip olacaktır:

  • Büyük resim (jpeg) gelen piksel kapmak ve bir tampon koydu
  • küçük resim (filigran) gelen şeffaf olmayan piksel kapmak ve yol boyunca alfa uygulayarak, bu tampon içine taşıyabilirsiniz

Muhtemelen bir kütüphane bu yapalım istiyorum. Ben php yerleşik özellikle bu yana, ImageMagick gibi ... Burada PHP bu amaçla kullanmak için nasıl bir örnek:

// Let's read the images. 
$glasses = new Imagick(); 
if (FALSE === $glasses->readImage($dir . '/glasses.png')) 
{ 
    throw new Exception(); 
} 

$face = new Imagick(); 
if (FALSE === $face->readImage($dir . '/face.jpg')) 
{ 
    throw new Exception(); 
} 

// Let's put the glasses on (10 pixels from left, 20 pixels from top of face). 
$face->compositeImage($glasses, Imagick::COMPOSITE_DEFAULT, 10, 20);

Ve here's the link (Yukarıdaki örnekte geldiği) ImageMagick :: compositeImage için PHP kılavuzu sayfa.