Я пытаюсь использовать следующий 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);
?>
Создает те же блочные эффекты, что и выше, за исключением того, что теперь на изображение не записывается текст (очевидно?).