imagecreatefrompng делает импортированное изображение блокированным? - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь использовать следующий PHP для применения случайно сгенерированных текстовых файлов к изображению.(Я сейчас использую случайное изображение.)

<?php
header ("Content-type: image/png");

$textfile = "quote.txt";
$quotes = array();
if(file_exists($textfile)){
$quotes = file($textfile);
srand ((float) microtime() * 10000000);
$string = $quotes[array_rand($quotes)];
$string = substr($string,0,strlen($string)-1);
}
else{
$string = "No 'Quote' available at this time.";
}


//$string = "your text";
// try changing this as well
$font = 4;
$width = imagefontwidth($font) * strlen($string) ;
$height = imagefontheight($font) ;
$im = imagecreatefrompng("test.png");
$x = imagesx($im) - $width ;
$y = imagesy($im) - $height;
$backgroundColor = imagecolorallocate ($im, 255, 255, 255);
$textColor = imagecolorallocate ($im, 0, 0,0);
imagestring ($im, $font, $x, $y,  $string, $textColor);
imagepng($im);
ImageDestroy($im);
?>

Однако, когда я запускаю этот код, импортированное изображение становится очень блочным.Вот изображение, с которым я тестирую:
http://i.stack.imgur.com/LhNkv.png

А вот как оно выглядит на самом деле:
http://i.stack.imgur.com/AAcHZ.png

Мое исследование показывает, что "imagecreate" генерирует«палитра» изображения - и я подумал, что это может быть как-то связано с моей ошибкой, но я видел множество примеров, когда базовое изображение ни в коем случае не искажается.

Заранее спасибо за ваши идеи.

(Тьфу. Это не позволило бы мне публиковать изображения, но я могу загружать их просто отлично?)

Обновление
Изменение кода на:

<?php
header ("Content-type: image/png");

$textfile = "quote.txt";
$quotes = array();
if(file_exists($textfile)){
$quotes = file($textfile);
srand ((float) microtime() * 10000000);
$string = $quotes[array_rand($quotes)];
$string = substr($string,0,strlen($string)-1);
}
else{
$string = "No 'Quote' available at this time.";
}


//$string = "your text";
// try changing this as well
$font = 4;
$width = imagefontwidth($font) * strlen($string) ;
$height = imagefontheight($font) ;
$im = imagecreatefrompng("test.png");
//$x = imagesx($im) - $width ;
//$y = imagesy($im) - $height;
//$backgroundColor = imagecolorallocate ($im, 255, 255, 255);
//$textColor = imagecolorallocate ($im, 0, 0,0);
//imagestring ($im, $font, $x, $y,  $string, $textColor);
imagepng($im);
ImageDestroy($im);
?>

Создает те же блочные эффекты, что и выше, за исключением того, что теперь текст не записывается на изображение, (очевидно?).

1 Ответ

3 голосов
/ 15 июля 2011

Может быть проблема с альфа-смешиванием.Попробуйте добавить их перед сохранением изображения:

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