watermark+png= проблемка

  • Автор темы Demmiurg123
  • Дата начала

Demmiurg123

Guest
watermark+png= проблемка

Нужно наложить на файл jpeg, полупрозрачный png24

Написал функцию, где:
$src - исходный jpeg
$logo-файл png
$x- отступ снизу
$y- отступ справа

function img_watermark($src, $logo, $x=10, $y=10, $quality=90){
if (!file_exists($src) || !file_exists($logo)) return false;
header( "Content-type: image/jpeg");
$src_img = ImageCreateFromJPEG($src);
imagealphablending ($src_img, true);
$size_src = getimagesize($src_img);
$logo_img = ImageCreateFromPNG($logo);
$size_logo = getimagesize($logo_img);
$bottom=$size_src[0]-($size_logo[0]+$x);
$right=$size_src[1]-($size_logo[1]+$y);
imagecopymerge ($src_img, $logo_img, $bottom, $right,0,0, $logoW, $logoH, 90);
imageJPEG($src_img, $src, 90);
ImageDestroy($src_img);
ImageDestroy($logo_img);
return true;
}

вызываю

img_watermark($DOCUMENT_ROOT.'/photo/photo1.jpeg', $DOCUMENT_ROOT.'/i/logo.png', 50, 50, 90);

но у png вместо полупрозрачности появляется белый фон. =((

Помогите плиз!

PS: Сразу прошу прощения, что не там запостил с первой попытки.
 

syst3m

Новичок
$watermark = "water.png";

$im = imagecreatefrompng($watermark);

$image = $_GET['image'];

$types = array(1 => "gif", 2 => "jpeg", 3 => "png");
if ($image_info = @getimagesize($image))
{
$image_create_handle = "imagecreatefrom".$types[$image_info[2]];
if (!$im2 = @$image_create_handle($image))
{
die("Error opening $image!");
}

imagecopy($im2, $im, (imagesx($im2)/100)-(imagesx($im)/100), (imagesy($im2)/100)-(imagesy($im)/100), 0, 0, imagesx($im), imagesy($im));

if($_GET[repeat])
{
$waterless = imagesx($im2) - imagesx($im);
$rest = ceil($waterless/imagesx($im)/1);

for($n=1; $n<=$rest; $n++)
{
imagecopy($im2, $im, ((imagesx($im2)/100)-(imagesx($im)/100))-(imagesx($im)*$n), (imagesy($im2)/100)-(imagesy($im)/100), 0, 0, imagesx($im), imagesy($im));
imagecopy($im2, $im, ((imagesx($im2)/100)-(imagesx($im)/100))+(imagesx($im)*$n), (imagesy($im2)/100)-(imagesy($im)/100), 0, 0, imagesx($im), imagesy($im));
}
}

header("Content-Type: image/jpeg");
imagejpeg($im2, $destination, 90);
imagedestroy($im);
imagedestroy($im2);
}
else
{
die("Error opening $image!");
}
рабочий код %)) кто-то тут давал....
 

Demmiurg123

Guest
2nerezus: попробую, только мне нужно jpeg
2syst3m: да этот код я видел, только я хочу изнать, по какой причине не работает мой! =(

-~{}~ 02.08.05 23:15:

Поправил, но проблема осталась


<?php
function img_watermark($src, $logo, $x=10, $y=10, $quality=90){
if (!file_exists($src) || !file_exists($logo)) return false;
header( "Content-type: image/jpeg");
$src_img = ImageCreateFromJPEG($src);
imagealphablending ($src_img, true);
$size_src = getimagesize($src);
$logo_img = ImageCreateFromPNG($logo);
$size_logo = getimagesize($logo);
$bottom=$size_src[0]-($size_logo[0]+$x);
$right=$size_src[1]-($size_logo[1]+$y);
imagecopymerge ($src_img, $logo_img, $bottom, $right,0,0, $size_logo[0], $size_logo[1], 90);
imageJPEG($src_img, $src, 90);
ImageDestroy($src_img);
ImageDestroy($logo_img);
return true;
}
img_watermark($DOCUMENT_ROOT.'/photo/photo1.jpeg', $DOCUMENT_ROOT.'/i/logo.png', 50, 50, 90);
?>
 

kruglov

Новичок
сделайте imagecreatetruecolor размером со JPEG и туда все положите.
 

Demmiurg123

Guest
2kruglov: Так?

function img_watermark($src, $logo, $x=10, $y=10, $quality=90){
if (!file_exists($src) || !file_exists($logo)) return false;
header( "Content-type: image/jpeg");
$src_img = ImageCreateFromJPEG($src);
imagealphablending ($src_img, true);
$size_src = getimagesize($src);
$logo_img = ImageCreateFromPNG($logo);
$size_logo = getimagesize($logo);
$bottom=$size_src[0]-($size_logo[0]+$x);
$right=$size_src[1]-($size_logo[1]+$y);

//очередная попытка
$new_img = imagecreatetruecolor($size_src[0], $size_src[1]);
imagecopymerge($new_img, $src_img, 0, 0, 0, 0, $size_src[0], $size_src[1], 90);
imagecopymerge($new_img, $logo_img, $bottom, $right, 0, 0, $size_logo[0], $size_logo[1], 90);
imageJPEG($new_img, $src, 90);

ImageDestroy($src_img);
ImageDestroy($logo_img);
return true;
}

Если так, то не работает! =(
 

kruglov

Новичок
Вот мой игрушечный код, он, правда, тумбнайлики делает, т.е. уменьшает...

PHP:
$width=100; // размер превьюшки
$height=100;
$orig=imagecreatefromjpeg('test.jpg'); // оригинальная картинка
$aspect=imagesx($orig)/imagesy($orig);
$logo=imagecreatefrompng('logo.png'); // полупрозрачный логотипчик
$thumb=imagecreatetruecolor($width, $height);
imagecopyresampled($thumb, $orig, 0, 0, 0, 0, $width, $height/$aspect, 
imagesx($orig), imagesy($orig));
imagecopy($thumb, $logo, $width-imagesx($logo), $height-imagesy($logo), 0, 
0, imagesx($logo), imagesy($logo));
imagejpeg($thumb, 'thumb.jpg'); // сохраняем тумбнайлик
-~{}~ 03.08.05 20:07:

эта фигня 100% работает...

если и оно не сработает, то, может, у вас png неправильный, не 24-битный, например, или без прозрачности вообще?
 

Demmiurg123

Guest
Работает! Спасибо большое, пошёл править свой код! =)
 
Сверху