Применение текста к проблеме прозрачности png PHP - PullRequest
1 голос
/ 31 декабря 2010

Я пытаюсь написать текст в png, однако, когда я делаю это, он обводит его темной рамкой, я не уверен, почему.

Исходное изображение:

Обрабатываемое изображение:

Код:

// Load the image
$im = imagecreatefrompng("admin/public/images/map/order/wally.png");

// If there's an error, gtfo
if(!$im) {
    die("");
}
$textColor = imagecolorallocate($im, 68, 68, 68);

$width = imagesx($im);
$height = imagesy($im);

$fontSize = 5; 
$text = "AC";
// Calculate the left position of the text
$leftTextPos = ($width - imagefontwidth($fontSize)*strlen($text)) / 2;
// Write the string
imagestring($im, $fontSize, $leftTextPos, $height-28, $text, $textColor);
// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

Ответы [ 2 ]

2 голосов
/ 31 декабря 2010

Да, сохранение с альфа-версией важно, но загрузка также важна.Ваше PNG-изображение может иметь прозрачность, но это хорошая практика, чтобы учесть это.

Вам нужно создать изображение в истинном цвете, установить альфа-цвет, а затем нарисовать на нем загруженное изображение с текстом.Вот как то так:

// create true color image
$img = imagecreatetruecolor($width, $height);
$transparent_color = imagecolorallocatealpha($img, 255, 255, 255, 0);

imagealphablending($img, false);
imagefillrectangle($img, 0, 0, $width, $height, $transparent_color);
imagealphablending($img, true);

// draw previously loaded PNG image
imagecopy($img, $loaded_img, 0, 0, 0, 0, $width, $height);

// draw your text

// save the whole thing
imagesavealpha($img, true);
imagepng($img, $file);
2 голосов
/ 31 декабря 2010

У меня была эта проблема несколько раз, позвольте мне найти ответ ...

Хорошо, нашел что-то:

imagesavealpha($im, true);
imagealphablending($im, true);

Напишите это до imagepng.

...