2012-10-29 44 views
0

作为imagettftext()变体使用自定义文本水印图像,但我必须在这里做一些错误...因为输出结果没有按照预期的水印。已经尝试了一些不同的方法,但是我觉得问题可能是水印创建的方式......导致后面的脚本我尝试使用imagecreatefrompng(),当我应该使用其他函数时...imagettftext()不输出原始图像+水印

正在使用的辅助功能:

//ini_set('gd.jpeg_ignore_warning', 1); 

function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0){ 
if ($spacing == 0){ 
    imagettftext($image, $size, $angle, $x, $y, $color, $font, $text); 
}else{ 
    $temp_x = $x; 
    for ($i = 0; $i < strlen($text); $i++){ 
     $bbox = imagettftext($image, $size, $angle, $temp_x, $y, $color, $font, $text[$i]); 
     $temp_x += $spacing + ($bbox[2] - $bbox[0]); 
    } 
} 
} 

function calculateTextDimensions($text, $font, $size, $angle, $spacing){ 
$rect = imagettfbbox($size, $angle, $font, $text); 
$minX = min(array($rect[0],$rect[2],$rect[4],$rect[6])); 
$maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6])); 
$minY = min(array($rect[1],$rect[3],$rect[5],$rect[7])); 
$maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7])); 
$spacing = ($spacing*(strlen($text)+2)); 
return array(
"left" => abs($minX) - 1, 
"top" => abs($minY) - 1, 
"width" => ($maxX - $minX)+$spacing, 
"height" => $maxY - $minY, 
"box" => $rect 
); 
} 

php脚本:

$text = "C o p y r i g h t A f o n s o G o m e s"; 
$font = "font/YanoneKaffeesatz-Bold-webfont.ttf"; 
$color = "0xFFFFFF"; 
$fundo = "0x779c4b"; 
$size = 13; 
$angle = 0; 
$padding = 4*5; 
$spacing = 0; 

$text_dimensions = calculateTextDimensions($text, $font, $size, $angle, $spacing); 
$image_width = $text_dimensions["width"] + $padding; 
$image_height = $text_dimensions["height"] + $padding; 

$watermark = imagecreatetruecolor($image_width, $image_height); 

ImageFill($watermark, 0, 0, $fundo); 
imagesavealpha($watermark, true); 
imagealphablending($watermark, true); 
imagettftextSp($watermark,$size,$angle,$text_dimensions["left"]+($image_width/2)-($text_dimensions["width"]/2),$text_dimensions["top"]+($image_height/2)-($text_dimensions["height"]/2), $color, $font, $text, $spacing); 
/* At this point the watermark is created */ 

$src = "TDJodmJXVXZhbUp0TDNCMVlteHBZMTlvZEcxc0wybHRZV2RsY3k5amIyNTBaWFZrYjNNdlNHVnlZbUZ5YVc4d055NXFjR2M9"; 
$src = base64_decode(base64_decode($src)); 
$marca = imagecreatefrompng($watermark); /* PROBLEM HERE? */ 
$imagem = imagecreatefromjpeg($src); 

/* DIMENSIONS */ 
$mx = imagesx($marca); 
$my = imagesy($marca); 
$ix = imagesx($imagem); 
$iy = imagesy($imagem); 

/* POSITION */ 
$x = 0; 
$y = $iy - $my - 0; 

imagecopy($imagem, $marca, $x, $y, 0, 0, $mx, $my); /* NEW IMAGE COMING OUT! */ 

header('Content-type: image/png'); 
imagepng($imagem); 
imagedestroy($imagem); 

对不起,粘贴长码...但这种感觉我上面的技巧一点。

在此先感谢。

回答

0

问题解决了:)

删除这条线

$marca = imagecreatefrompng($watermark); /* PROBLEM HERE? */ 

$ MX和$我成为

$mx = $image_width; 
    $my = $image_height; 

而且imagecopy的()接收$ watermak变量

imagecopy($imagem, $watermark, $x, $y, 0, 0, $mx, $my); /* NEW IMAGE COMING OUT! */