Forum Webscript.Ru
Программирование => Perl => Тема начата: 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::Text
Заодно покажи что в $font
-
вчера так и не удалось прорваться на форум. висел он что ли? :)
==
я пробовала и полные пути и относительные прописывать - это ничего не меняет. результат тот же. не в этом дело.
$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
Не будет мне счастья, с этой затеей, да?
==
-
можно просто сохранить этот http://search.cpan.org/src/MVERB/GDTextUtil-0.86/Text.pm
а в скрипте использовать через use lib ....... да?
сейчас попробую.
-
нет. это не работает. просто пустая картинка, пустой лог...
никто не знает как заставить модуль GD печатать буковки?
-
AnnA
можно просто сохранить этот http://search.cpan.org/src/MVERB/GD...il-0.86/Text.pm
Сомневаюсь... подключи в ppm репозитарий
http://theoryx5.uwinnipeg.ca/ppmpackages/
Установи пакет GDTextUtil и будет счастье...
-
добавила, установила, а счастья всё нет. ;)
Вы, совершенно случайно, не в курсе как в нём можно(?) задать ЦВЕТ выводимых буковок. Как задать координаты - разобралась с горем пополам. (хотя пока не очень-то это и помогло...)
-
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
-
пасиба Phoinix, пасиба NeoNox. :)
в общем и целом - полдня потрачено зря - пришла к тому, с чего начала:
1. для вывода английского текста пользуемся "старой доброй"
$im->string(gdSmallFont,......); это работает всегда и везде,
о кириллице под виндовс забываем напрочь.
2. GDTextUtil - удалила: бестолковый модуль. "обёртка" :) Пользы никакой, а писанины добавилось.
3. http://www.bribes.org/perl/ppm/ лежит версия GD 2.19!
в том числе и для Perl 5.6..
поставлю - буду пробовать печатать все-таки своим шрифтом, а не системным и русскими буковками.
всем хороших выходных.
-
вот теперь ВСЁ работает!
очень рекомендую обновить версию модуля до 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)
-
AnnA
Может с Вами книжкой поделиться этой
Graphics Programming with Perl (http://www.manning.com/verbruggen)
-
AnnA
очень рекомендую обновить версию модуля до 2.19.
C:\\Program Files\\Far>perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
Это я бы тоже рекомендовал обновить...
-
vladsu а она у Вас на каком языке? ;)
Phoinix и до какой версии, интересно. До 5.8?
заодно с рекомендацией, не подскажете зачем обновляться до версии под которой не работают столько (http://ppm.activestate.com/BuildStatus/5.8.html) модулей? ;) Среди которых: CGI-Compress-Gzip, например. И, Вы будете смеятся, но GD 2.19 тоже в этом списке есть...
Нет уж, спасибо, я пока подожду. Тем более, что в этом наши мысли совпадают с моим хостером.
-
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
Кто ищет, тот всегда найдет.
Дальше комментарии я думаю излишни...
-
Phoinix:
Не буду навязываться
Вот это правильное решение. :)Phoinix:
Дальше комментарии я думаю излишни...
ага. совершенно излишни. ;) спасибо только за плохую рекомендацию. и.. правда-правда, обещаю со своей ленью разобраться сама. Ну а хостер - ему, наверное видней
Phoinix:
И сколько из них используются
в работе всех сайтов, которые он поддерживает. ;)