1363694152 PerlのImagerでテキストの画像を作りたい!

Imagerを使ってフォームから送られてきたテキストを、画像化しようとしていますが、日本語が文字化けしてしまいます。
$textが普通に「$text="ああああ";」だと、うまくできます。
ファイルは、UTF-8です。(添付画像はそこに入れてみたものです。理想)
□□□↓↓ファイル↓↓□□□
#! /usr/bin/perl
#インポート
use strict;
use warnings;
use utf8;
use Imager;

$text="ああああ";#←ここを「my ($cmd,$text) = split(/;/,$ENV{'QUERY_STRING'});」にすると、エラー
#↑ここをCGI.pmを使ってみたら、文字化け!
my $font = Imager::Font->new(
file => '/home/*****/public_html/font/○△□.ttf',
color => '#000000',
size => 60,
);
my $bbox = $font->bounding_box(string => $text); # 文字情報を取得
my $img = Imager->new(xsize => $bbox->total_width, ysize => $bbox->font_height);
$img->box(color => '#ffffff', filled => 1); # 背景を白くする
$img->string(
font => $font,
text => $text,
x => 0,
y => $bbox->font_height + $bbox->descent,
aa => 1,
);
print "Content-type: image/png\n\n";
print $img->write(fh => \*STDOUT, type => 'png') or die $img->errstr;
□□□↓↓ここまで↓↓□□□
どうか、文字化けしないようテキストを、GETメソッドで受け取れるように改変していただけませんか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/26 21:00:07

回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

>my ($cmd,$text) = split(/;/,$ENV{'QUERY_STRING'});

テキストボックスが1つだけのフォームでも、
QUERY_STRINGには複数のキー/バリューのペアが入っていたりします。
百聞は一見にしかず…なので、下記のようにして中身を確認してみてください。

print $ENV{'QUERY_STRING'};

>CGI.pmを使ってみたら、文字化け!

キャラクタセット指定忘れ?

my $c = new CGI;
$c->charset('utf-8');
他2件のコメントを見る
id:windofjuly

http://q.hatena.ne.jp/1364018504 で回答リクエストを受け取ったが、
複数の質問を並行して見るのは面倒なので、こちらでコメントを続ける。

何も返信することなく放置するのは礼儀に反する行為であり、
私はすでに腹立たしく思っているので、
あまり親切に答える気は無いと告げておく。

マルチ投稿はそもそも儀礼に反するが、
どうしてもということで行ったならば、
せめてもの礼儀として、一方にだけコメントを行うのではなく、
両方並行して行うべきである。

さて、
回答者の責務として出来る範囲では答えていこうと思うが、
現状で気になっている点は今のところ1つだけ。

「font001.TTF は日本語に対応したフォントか?」

余談になるけども、
font001.TTF は Microsoftが配布していたものだと思われるが、どうだろう?
仮にそうだとすれば、公の場で使って良いという書類を見たことはないので、
用途を自宅内や社内での実験用などと割り切っている場合を除けば、
ライセンス違反になるかもしれない。注意したいところだ。

2013/03/23 19:53:39
id:kamesuta

font001.TTF は、実験用で「MSゴシック」です。本当は、自作フォントを使う予定ですが、ひらがな、カタカナ、数字 しか使えないし、わかりずらいので、使っています。
日本語に対応しています。

2013/03/24 12:11:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません