[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с GD, imagettftext выдаёт размытый текст
TUNER88
Проблема с GD, imagettftext выдаёт размытый текст.
Один скрипт выдаёт на разных серверах разные изображения.

Вот ссылки на изображение:
Правельное отображение
Размытое отображение (другой сервер)


<?php


// Set the content-type
header('Content-type: image/png');

// Насройки
$bg = "img/bg.png";
$top = "img/top2.png";
$size = 8;
$usize = 8;
$user = "RACER33";
$font = 'visitor.ttf';

// Создаём изображение
$im = imagecreatefrompng($bg);
$topim = imagecreatefrompng($top);
$color = imagecolorallocate($im, 255, 255, 205);

//--------------------------------------------------------------
// Get values

.......

//--------------------------------------------------------------

// Вывод текста

imagettftext($im, $size, 0, 10, 12, $color, $font, $os);
imagettftext($im, $size, 0, 10, 22, $color, $font, $ip);
imagettftext($im, $size, 0, 10, 32, $color, $font, $browser);
imagettftext($im, $usize, 0, $x, 32, $color, $font, $user);


imagecopymerge_alpha($im, $topim, 0, 0, 0, 0, 350, 38, 50);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
imagedestroy($topim);
?>




Спустя 1 час, 13 минут, 28 секунд (18.12.2009 - 23:55) sergeiss написал(а):
Цитата (TUNER88 @ 18.12.2009 - 23:42)
imagecopymerge_alpha(

А это что за функция такая? Чегой-то я не вижу такой среди стандартных... И мне кажется, проблема именно в этой функции.

Другой вопрос - почему ты не выводишь текст на итоговое изображение, а используешь некоторое промежуточное?

Спустя 31 минута, 10 секунд (19.12.2009 - 00:27) TUNER88 написал(а):
Она только белую крышку сверху накладывает

Вот весть код
<?php
// Set the content-type
header('Content-type: image/png');

// Насройки
$bg = "img/bg.png";
$top = "img/top2.png";
$size = 8;
$usize = 8;
$user = "RACER33";
$font = 'visitor.ttf';

// Создаём изображение
$im = imagecreatefrompng($bg);
$topim = imagecreatefrompng($top);
$color = imagecolorallocate($im, 255, 255, 205);

//--------------------------------------------------------------
// Get values

$time=date("H.i");

$ip=$_SERVER['REMOTE_ADDR'];
$ip="IP: $ip";


$oses=array(
'windows nt 6.1',
'windows nt 6.0',
'windows nt 5.2',
'windows nt 5.1',
'windows nt 5.0',
'windows nt 4.0',
'windows me',
'windows 98',
'windows 95',
'iphone',
'mac',
'linux',
'win'
);

$osnames=array(
'windows nt 6.1'=>'Windows 7',
'windows nt 6.0'=>'Windows Vista',
'windows nt 5.2'=>'Windows Server 2003 or XPx64',
'windows nt 5.1'=>'Windows XP',
'windows nt 5.0'=>'Windows 2000',
'windows nt 4.0'=>'Windows NT',
'windows me'=>'Windows ME',
'windows 98'=>'Windows 98',
'windows 95'=>'Windows 95',
'iphone'=>'iPhone OS',
'mac'=>'MacOS',
'linux'=>'Linux',
'win'=>'Windows'
);

$browsers=array(
'msie',
'firefox',
'opera',
'chrome',
);


$names=array(
'msie'=>'Internet Explorer',
'firefox'=>'Mozilla Firefox',
'opera'=>'Opera',
'chrome'=>'Google Chrome',
);


$agent=strToLower($_SERVER['HTTP_USER_AGENT']);
$os='Unknown';
foreach($oses as $s)
if(strpos($agent,$s)){
$os=$osnames[$s];
break;
}
$browser='Unknown';
foreach($browsers as $brwsr)
if($pos=strpos($agent,$brwsr)){
$browser=$names[$brwsr];
break;
}
if($browser!=='Unknown') {
$ver='';
for(;$pos<=strlen($agent);$pos++){
if((is_numeric($agent[$pos]))||($agent[$pos]=='.'))
$ver.=$agent[$pos];
else if ($ver) break;
}
$browser.=' '.$ver;
}
#$browser="BROWSER: $browser";
$os="OC: $os";

//Ширина ника в px
$bbox = imagettfbbox ($usize, 0, $font, $user);
$x = 340 - ($bbox[2] - $bbox[0]);

// Функция склеивания изображений
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
$opacity=$pct;
// getting the watermark width
$w = imagesx($src_im);
// getting the watermark height
$h = imagesy($src_im);

// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying that section of the background to the cut
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// inverting the opacity
$opacity = 100 - $opacity;

// placing the watermark now
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
}

//--------------------------------------------------------------

// Вывод текста

imagettftext($im, $size, 0, 10, 12, $color, $font, $os);
imagettftext($im, $size, 0, 10, 22, $color, $font, $ip);
imagettftext($im, $size, 0, 10, 32, $color, $font, $browser);
imagettftext($im, $usize, 0, $x, 32, $color, $font, $user);


imagecopymerge_alpha($im, $topim, 0, 0, 0, 0, 350, 38, 50);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
imagedestroy($topim);


// LOG FILE
$ip = getenv("remote_addr");
$site = getenv("HTTP_REFERER");
$file = fopen("log.txt","a");
$string = "$site: $ip \n";
fputs($file, $string);
fclose($file);
?>


Вот эта функция
// Функция склеивания изображений
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
$opacity=$pct;
// getting the watermark width
$w = imagesx($src_im);
// getting the watermark height
$h = imagesy($src_im);

// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying that section of the background to the cut
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// inverting the opacity
$opacity = 100 - $opacity;

// placing the watermark now
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
}

Спустя 41 секунда (19.12.2009 - 00:27) TUNER88 написал(а):
Косяк именно в imagettftext

Спустя 13 минут, 57 секунд (19.12.2009 - 00:41) sergeiss написал(а):
Ты попробуй просто вывести текст на единственную картинку. Безо всякого объединения картинок.
Если всё будет нормально, то проблема именно в "склеивании".

Спустя 5 часов, 37 минут, 5 секунд (19.12.2009 - 06:18) TUNER88 написал(а):
Цитата (sergeiss @ 18.12.2009 - 21:41)
Ты попробуй просто вывести текст на единственную картинку. Безо всякого объединения картинок.
Если всё будет нормально, то проблема именно в "склеивании".

Склеивание происходит поверху отрисовки текста. Оно не причём.

Но, не важно, всеравно создал файлик для проверки

<?php
// Set the content-type
header('Content-type: image/png');

// Насройки
$size = 8;
$user = "TTEST TEXT";
$font = 'visitor.ttf';

// Создаём изображение
$im = imagecreate(350, 38);
$background = imagecolorallocate($im, 255, 0, 0);
$color = imagecolorallocate($im, 255, 255, 205);// Вывод текста
imagettftext($im, $size, 0, 10, 12, $color, $font, $user);
imagettftext($im, $size, 0, 10, 22, $color, $font, $user);
imagettftext($im, $size, 0, 10, 32, $color, $font, $user);

imagepng($im);
imagedestroy($im);
?>


Тест (нормальная картинка)
Тест (размытая картинка)

В чём может быть проблема???

Спустя 4 минуты, 38 секунд (19.12.2009 - 06:23) TUNER88 написал(а):
Цитата
Другой вопрос - почему ты не выводишь текст на итоговое изображение, а используешь некоторое промежуточное?


Потому что белая крышка (полукруг вверху) должен ложится на текст.

Спасибо кстати за помощь!!! rolleyes.gif

Спустя 2 часа, 45 минут, 9 секунд (19.12.2009 - 09:08) VolCh написал(а):
попробуй использовать отрицательный $color
imagettftext($im, $size, 0, 10, 12, -$color, $font, $user);

Спустя 2 часа, 21 минута, 16 секунд (19.12.2009 - 11:29) sergeiss написал(а):
Цитата (TUNER88 @ 19.12.2009 - 07:23)
Спасибо кстати за помощь!!!

Да всегда пожалуйста smile.gif Только я не понял, в чем я реально помог. Вроде бы, у тебя проблема как была, так и осталась.

Спустя 4 часа, 15 минут, 40 секунд (19.12.2009 - 15:45) TUNER88 написал(а):
Цитата
Да всегда пожалуйста smile.gif Только я не понял, в чем я реально помог. Вроде бы, у тебя проблема как была, так и осталась.

Ну хотя бы за желание помочь!!!
Цитата
imagettftext($im, $size, 0, 10, 12, -$color, $font, $user);

Стало по лучше, пропало размытие но шрифт сильно большой и кривоват немного.

Попробовал изменить размер шрифта в нижней строчке с 7 на 8, размер меньше стал а вот буквы не совсем правильно отображаются + между буквами промежутки пропали.

Не правильное отображение
Правильное отображение

Спустя 6 часов, 1 минута, 30 секунд (19.12.2009 - 21:46) sergeiss написал(а):
Файлы шрифтов одинаковые на самом деле, или только названия одинаковые, а содержание разное?

Спустя 1 час, 12 минут, 48 секунд (19.12.2009 - 22:59) TUNER88 написал(а):
Цитата
Файлы шрифтов одинаковые на самом деле, или только названия одинаковые, а содержание разное?

Ну конечно одинаковые, так бы я вопрос не задавал бы.
Я просто папку всю перенёс.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.