0

imagettftext()バリアントを使用して、カスタムテキストで画像に透かしを入れますが、ここで何か間違ったことをしている必要があります...出力結果に意図した透かしがないためです。すでにいくつかの異なるアプローチを試しましたが、透かしの作成方法に問題がある可能性があります...スクリプトの後半で、他の関数を使用する必要があるときにimagecreatefrompng()を使用しようとしています...

使用されている補助機能:

//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);

長いコードが貼り付けられて申し訳ありません...しかし、これは私のスキルを少し上回っています。

前もって感謝します。

4

1 に答える 1

0

問題が解決しました :)

この行を削除しました

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

$mx と $my は

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

そして imagecopy() は $watermak 変数を受け取ります

imagecopy($imagem, $watermark, $x, $y, 0, 0, $mx, $my); /* NEW IMAGE COMING OUT! */
于 2012-10-29T18:53:00.173 に答える