imagecreatefrompng делает импортированное изображение блочным?

Я пытаюсь использовать следующий 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);
?>

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


person Nicolas    schedule 15.07.2011    source источник
comment
Что произойдет с сгенерированным изображением, если вы закомментируете все, что находится между $im = imagecreatefrompng(test.png); и изображениеpng($im); ?   -  person vascowhite    schedule 15.07.2011
comment
@vascowhite Комментирование, как показано выше (и вы предложили), просто дает те же результаты, за исключением того, что теперь текст также не записывается на изображение.   -  person Nicolas    schedule 15.07.2011
comment
Вы только что удалили 6 строк кода из проблемы. Вы пробовали это с другим изображением?   -  person vascowhite    schedule 15.07.2011


Ответы (1)


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

imagealphablending($im, true); 
imagesavealpha($im, true); 
person Dan Grossman    schedule 15.07.2011
comment
У меня совершенно другая проблема, но это также исправило некоторые мои вещи! слава - person ied3vil; 12.06.2015