GD::Textモジュール(日本語チョウ訳) Ver.0.75

by Hippo2000(2001/2/26)

GD::Textモジュールなのです。

原本の著作権はMartien Verbruggen 氏がお持ちです(詳しくは著作権情報を見てください)。Martien Verbruggen 氏からは、メールで了解をいただきました。Thank you, Mr Verbruggen!

内容等が間違っていたら修正します。ご連絡ください。

GD::Textには以下のサブクラスがあります

モジュール 説 明
GD::Text::Align 位置づけられた文字列の描画
GD::Text::Wrap 領域で文字列を折り返す


名前

GD::Text - GDのために使用されるテキスト・ユーティリティ


概要

  use GD;
  use GD::Text;
  my $gd_text = GD::Text->new() or die GD::Text::error();
  $gd_text->set_font('funny.ttf', 12) or die $gd_text->error;
  $gd_text->set_font(gdTinyFont);
  $gd_text->set_font(GD::Font::Tiny);
  ...
  $gd_text->set_text($string);
  my ($w, $h) = $gd_text->get('width', 'height');
  if ($gd_text->is_ttf)
  {
          ...
  }

または代わりに

  my $gd_text = GD::Text->new(
        text => 'Some text',
        font => 'funny.ttf',
        ptsize => 14,
    );

説明

このモジュールはGD::Text::*とGD::Graphで使用されるように、GDでのフォントから独立したテキストの扱い方を提供します。


注意

すべてのPerlためのモジュールに:インタフェースを守って使うようにしてください。このモジュールの内部の知識を使ってもて遊びすぎると痛い目にあうでしょう。いつかはこれを変更するかもしれません。

TrueTypeフォントはGDのバージョン>1.20で、これをサポートするようにコンパイルしたときにのみ利用できます。それでもやろうとすると、エラーになります。


メソッド


GD::Text->new( attrib => value, ... )

新しいオブジェクトを生成します。属性のためのsetメソッドをご覧ください。


GD::Text::error() または $gd_text->error();

クラスで最後に発生したエラーを返します。これは不完全かもしれません。


$gd_text->set_font( font, size )

この文字列で使用するフォントを設定します。引数は(gdSmallFontやGD::Font->Smallのような)GD組込フォントやTrueTypeフォント・ファイル名、そして使用するフォントの大きさです。font_pathもご覧ください。

フォント・ファイルへの絶対パスを使わなければ、ファイル拡張子.ttfを付けずに済みます。しかし絶対パスでは付けなければなりません。

  $gd_text->set_font('cetus', 12);
  # しかし
  $gd_text->set_font('/usr/fonts/cetus.ttf', 12);

最初の引数はフォントの配列へのリファレンスにすることができます。配列のなかで最初に見つかったフォントが使われます。これは以下のようにすることができます

  $gd_text->font_path( '/usr/share/fonts:/usr/fonts');
  $gd_text->set_font(
    ['verdana', 'arial', gdMediumBoldFont], 14);

verdanaを使いたい、arialでも満足しよう、でもそれらが利用できなければ使えるものに落ち着くことを確実にすることができます。

成功すればtrue、エラーならばfalseを返します。

対象となるテキストを設定します。成功すればtrueを、エラーならばfalseを返します。


$gd_text->set( attrib => value, ... )

setメソッドは他のset_xxx()メソッドを置換えるための便利なものです。正しい属性は:

text
対象となるテキスト。set_text()もご覧ください。
font, ptsize
使用するフォントとポイントサイズ。ポイントサイズはTrueTypeフォントにもに使用することができます。set_fontをご覧ください。

成功すればtrue、エラーであれば例えば部分的に成功してもfalseを返します。エラーが返されると、属性の正しさに関しては保証されません。


$gd_text->get( attrib, ... )

属性の値を取得します。リスト・コンテキストでは属性の値のリストを返し、スカラ・コンテキストでは先頭の属性の値を返します。

取得できる属性は設定できるものすべてと以下のものがあります:

width, height
文字列の幅(高さ)をピクセルで
space
空白の幅をピクセルで
char_up, char_down
文字が基本線から上にあるいは下に突出しているピクセル数。TrueTypeフォントにのみ有効であることに注意してください。組込フォントではchar_upは高さとchar_downは常に0になります。

これらのパラメータのいくつか(char_up、char_downそしてspace)は一般的なフォント属性であること、そして設定されているテキストの属性では必ずしもないことに注意してください。


$gd_text->width('string')

現在のテキストの値を変えることなく、文字列の長さをピクセルで返します。現在のフォントと大きさで書かれた'string'の幅を返します。失敗するとundefを返します。

このメソッドを使うことは、おそらく非難(deprecate)されます。


$gd_text->is_builtin

現在のオブジェクトが組込GDフォントをベースにしていればtrueを返します。


$gd_text->is_ttf

現在のオブジェクトがTrueTypeフォントをベースにしていればtrueを返します。


$gd_text->can_do_ttf() または GD::Text->can_do_ttf()

このオブジェクトがTTFフォントを扱えればtrueを返します。

これはGDのバージョンが1.19よりも新しく、TTFサポートでコンパイルされたかどうかによります。


$gd_text->font_path(path_spec), GD::Text->font_path(path_spec)

これはクラス(つまり単にオブジェクトではなく)のためのフォント・パスを設定します。set_fontメソッドはそれがTrueTypeフォントであれば、指定されたフォントをこのパスで探します。それはパスのリストが含まれます。現在のディレクトリは、FONT_PATHに'.'がなければ、常に最初に探されます。例えば:

  GD::Text->font_path('/usr/ttfonts'); # Unix
  GD::Text->font_path('c:/fonts');     # MS-OS

この場合、絶対パスではないすべてのフォント名はまず現在のディレクトリで探され、そして/usr/ttfonts(c:\fonts)で探されます。

  GD::Text->font_path('/usr/ttfonts:.:lib/fonts'); # Unix
  GD::Text->font_path('c:/fonts;.;f:/fonts');      # MS-OS

この場合、絶対パスではないすべてのフォント名はまず/usr/ttfonts(c:\fonts)で、そして現在のディレクトリで、さらに現在のディレクトリからの相対位置でのlib/fonts(f:\fonts)で探されます。

  GD::Text->font_path(undef);

フォント・ファイルは現在のディレクトリでのみ探されます。

FONT_PATHはロード時に環境変数FONT_PATHまたはそれがなければTTF_FONT_PATHにより初期化されます。

設定されたフォント・パスを返します。もし引数なしで呼ばれると、現在のフォント・パスを返します。

注意:現在はunixおよび(そうであることを望みますが)MicrosoftベースのOSでのみ機能します。どなたかコードを見てくれて、それらのOSのためのパッチを送ってくれれば、本当にうれしいんですが。


バグ

このモジュールはanglo-centricでの'通常の'フォントとエンコーディングでのみテストされてきました。他の特徴を持つフォントはうまく動かないかもしれません。もしそうであれば、どのようにすればこれをうまく機能させることができるか教えてください。

フォントの高さはPOSIX::isgraph()テストをパスしたすべての出力可能な文字が入った文字列を組み立てることにより見積もられます。もしあなたのシステムがPOSIXを持っていなければ、失敗するような計算した結果を作るかもしれません。

フォント・パスに関するすべてのことはUnixではうまくいきますが、他のOSではおそらくはそうもうまくはいかないでしょう。これはフォント・パスを使おうとしたときのみの問題です。フォント・パスを使わなければ、問題はありません。将来はこれを拡張します。しかしそれは判断がついたときだけです。提案をお待ちしています。


著作権(COPYRIGHT)

copyright 1999 Martien Verbruggen (mgjv@comdyn.com.au)


参考資料

GD(3), GD::Text::Wrap(3), GD::Text::Align(3)


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。