Forum Webscript.Ru

Программирование => Perl => Тема начата: AnnA от 03 Февраля 2005, 21:07:40

Название: GD
Отправлено: AnnA от 03 Февраля 2005, 21:07:40
скажите, как его научить печатать текст?
у хостера все нормально. не просто печатает, а даже русский может...
У меня стоит GD 2.06:
1.
use cyrillic qw/convert detect win2utf/;
use GD;

my $ru = \'Русский Текст - win1251\';
my $en = \'English Text - win1251\';

my $im = new GD::Image(200,120);
.......

#вывод:
my $char = detect($ru);
my $str_ru  = convert( $char, \'utf\', $ru );
my $str_en  = convert( $char, \'utf\', $en );

#или так
#my $str_ru = win2utf($ru);
#my $str_ru = win2utf($en);

$im->stringTTF($gold,$font,10,0,7,13,$str_ru);
$im->stringTTF($white,$font,10,0,7,42,$str_en);

binmode STDOUT;

print "Content-type: image/jpeg\\n\\n";
print $im->jpeg();
Символы на картинке: 
в ДВУХ строках. Т.е. не печатается даже английский текст.

2. тот же код, но без use cyrillic qw/convert detect win2utf/; в слабенькой надежде получить хотя бы английские буковки. увы. надежда не оправдалась.

3,4... вариантов еще было много. ;) не буду их все описывать они не увенчались успехом. Хотя, скажу честно, так я и не додумалась выводить бинарную картинку с заголовками "Content-type: text/html\\n\\n", как тут один «знающий» господин подсказывал в топике про
Название: GD
Отправлено: NeoNox от 03 Февраля 2005, 22:14:57
Нет у тебя подключенных фонтов.
Пробуй использовать GD::Text
Заодно покажи что в $font
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 11:02:10
вчера так и не удалось прорваться на форум. висел он что ли? :)
==
я пробовала и полные пути и относительные прописывать - это ничего не меняет. результат тот же. не в этом дело.
$font = \'verdana.ttf\'; лежит тут же, где и шрифт. причём, если дать, например $font = \'arial.ttf\'; (ну или там, например, garamond.ttf) - выводимые кубички несколько видоизменяются. Т.е. можно сделать вывод, что файлы шрифтов скрипт находит. Еще и потому, что, когда он их не находит, - на картинке нет ничего и в логе есть сообщение о невозможности прочесть файл такой-то.
В моем же случае лог совершенно пустой. :(
GD::Text ага. Я пробовала. Еще утром сегодня. глядите:C:\\Program Files\\Far>ppm install GD::Text
Installing package \'GD-Text\'...
Error installing package \'GD-Text\': Could not locate a PPD file for package GD-Text

C:\\Program Files\\Far>perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
............

C:\\Program Files\\Far>ppm query GD
GD                 [2.06] Interface to Gd Graphics Library
Image-GD-Thumbnail [0.02] produce thumbnail images with GD
ppm set
Current PPD repository paths:
        ActiveState Package Repository: [url]http://ppm.ActiveState.com/cgibin/PPM/ppmserver.pl[/url]
?urn:/PPMServer

Не будет мне счастья, с этой затеей, да?
==
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 11:04:47
можно просто сохранить этот http://search.cpan.org/src/MVERB/GDTextUtil-0.86/Text.pm
а в скрипте использовать через use lib ....... да?
сейчас попробую.
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 12:05:44
нет. это не работает. просто пустая картинка, пустой лог...
никто не знает как заставить модуль GD печатать буковки?
Название: GD
Отправлено: Phoinix от 04 Февраля 2005, 12:11:15
AnnA

Цитировать
можно просто сохранить этот http://search.cpan.org/src/MVERB/GD...il-0.86/Text.pm


Сомневаюсь... подключи в ppm репозитарий
http://theoryx5.uwinnipeg.ca/ppmpackages/

Установи пакет GDTextUtil и будет счастье...
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 12:43:38
добавила, установила, а счастья всё нет. ;)
Вы, совершенно случайно, не в курсе как в нём можно(?) задать ЦВЕТ выводимых буковок. Как задать координаты - разобралась с горем пополам. (хотя пока не очень-то это и помогло...)
Название: GD
Отправлено: Phoinix от 04 Февраля 2005, 12:53:29
AnnA

Случайно в курсе...


     ...
     use GD; use GD::Text::Wrap;
     my $image = new GD::Image($user_vars{\'image_x\'}, $user_vars{\'image_y\'});
# Вот здесь, как раз опеределяются цвета
     my $bground = $image->colorAllocate(hex(substr($user_vars{\'bground\'},1,2)),hex(substr($user_vars{\'bground\'},3,2)),hex(substr($user_vars{\'bground\'},5,2)));
     my $border = $image->colorAllocate(hex(substr($user_vars{\'border\'},1,2)),hex(substr($user_vars{\'border\'},3,2)),hex(substr($user_vars{\'border\'},5,2)));
     my $textcolor = $image->colorAllocate(hex(substr($user_vars{\'textcolor\'},1,2)),hex(substr($user_vars{\'textcolor\'},3,2)),hex(substr($user_vars{\'textcolor\'},5,2)));

    $image -> fill(5,5,$bground); $image -> rectangle(0,0,($user_vars{\'icon_x\'} - 1),($user_vars{\'icon_y\'} - 1),$border);

    my $string = \'blablabla\';
    my $text = GD::Text::Wrap -> new($image, line_space => 1, color => $textcolor, text => $string,);
    $text->set_font(\'tahoma.ttf\', $user_vars{\'size\'});
    $text->set(align => \'center\', width => $user_vars{\'textwidth\'});
    $text->draw($user_vars{\'text_x\'},$user_vars{\'text_y\'});

     my $file = \'./image.png\';
     open (IMG, ">$file");
     print IMG $image->png;
     close IMG;
    ...


Надеюсь все понятно...
Практически полный набор манипуляций с текстом...

P.S. $user_vars{\'bground\'} - формат FAFAFA без решетки, в общем, определение как в HTML
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 14:24:52
пасиба Phoinix, пасиба NeoNox. :)
в общем и целом - полдня потрачено зря - пришла к тому, с чего начала:
1. для вывода английского текста пользуемся "старой доброй"
$im->string(gdSmallFont,......); это работает всегда и везде,
о кириллице под виндовс забываем напрочь.
2. GDTextUtil - удалила: бестолковый модуль. "обёртка" :) Пользы никакой, а писанины добавилось.
3. http://www.bribes.org/perl/ppm/ лежит версия GD 2.19!
в том числе и для Perl 5.6..
поставлю - буду пробовать печатать все-таки своим шрифтом, а не системным и русскими буковками.
 
всем хороших выходных.
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 15:12:15
вот теперь ВСЁ работает!
очень рекомендую обновить версию модуля до 2.19.
нужно установить еще cyrillic и будет печатать по-русски под виндой! ;)
он, кстати, теперь работает с гифами, с анимированными гифами и даже с альфа-каналом(прозрачность в гиф и пнг)!
а что касается позиционирования текста - он же (даже в старых версиях) всегда отдаёт:
         @bounds[0,1]  Lower left corner (x,y)
         @bounds[2,3]  Lower right corner (x,y)
         @bounds[4,5]  Upper right corner (x,y)
         @bounds[6,7]  Upper left corner (x,y)
Название: GD
Отправлено: vladsu от 04 Февраля 2005, 16:08:53
AnnA

Может с Вами книжкой поделиться этой

Graphics Programming with Perl (http://www.manning.com/verbruggen)
Название: GD
Отправлено: Phoinix от 04 Февраля 2005, 19:42:39
AnnA

Цитировать
очень рекомендую обновить версию модуля до 2.19.


C:\\Program Files\\Far>perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread

Это я бы тоже рекомендовал обновить...
Название: GD
Отправлено: AnnA от 04 Февраля 2005, 20:30:13
vladsu а она у Вас на каком языке? ;)
Phoinix и до какой версии, интересно. До 5.8?
заодно с рекомендацией, не подскажете зачем обновляться до версии под которой не работают столько (http://ppm.activestate.com/BuildStatus/5.8.html) модулей? ;) Среди которых: CGI-Compress-Gzip, например. И, Вы будете смеятся, но GD 2.19 тоже в этом списке есть...
Нет уж, спасибо, я пока подожду. Тем более, что в этом наши мысли совпадают с моим хостером.
Название: GD
Отправлено: Phoinix от 05 Февраля 2005, 10:26:29
AnnA
Цитировать
и до какой версии, интересно. До 5.8?

Естественно...

Цитировать
заодно с рекомендацией, не подскажете зачем обновляться до версии под которой не работают столько модулей?

Странный вопрос... И сколько из них используются в твоей работе?

Не буду навязываться, но мне кажется все Ваши утверждения ошибочны... Впрочем как и хостера. IMHO это не совпадение мыслей, а совпадение лени...

P.S. Ради интереса посмотрел версию модуля GD на своем локальном компьютере:

package GD;
...
$VERSION = "2.19";


C:\\perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread

Кто ищет, тот всегда найдет.
Дальше комментарии я думаю излишни...
Название: GD
Отправлено: AnnA от 07 Февраля 2005, 11:35:43
Цитировать
Phoinix:
Не буду навязываться

Вот это правильное решение. :)
Цитировать
Phoinix:
Дальше комментарии я думаю излишни...

ага. совершенно излишни. ;) спасибо только за плохую рекомендацию. и.. правда-правда, обещаю со своей ленью разобраться сама. Ну а хостер - ему, наверное видней
Цитировать
Phoinix:
И сколько из них используются
в работе всех сайтов, которые он поддерживает. ;)