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メソッドで受け取れるように改変していただけませんか?
>my ($cmd,$text) = split(/;/,$ENV{'QUERY_STRING'});
テキストボックスが1つだけのフォームでも、
QUERY_STRINGには複数のキー/バリューのペアが入っていたりします。
百聞は一見にしかず…なので、下記のようにして中身を確認してみてください。
print $ENV{'QUERY_STRING'};
>CGI.pmを使ってみたら、文字化け!
キャラクタセット指定忘れ?
my $c = new CGI; $c->charset('utf-8');
http://q.hatena.ne.jp/1364018504 で回答リクエストを受け取ったが、
2013/03/23 19:53:39複数の質問を並行して見るのは面倒なので、こちらでコメントを続ける。
何も返信することなく放置するのは礼儀に反する行為であり、
私はすでに腹立たしく思っているので、
あまり親切に答える気は無いと告げておく。
マルチ投稿はそもそも儀礼に反するが、
どうしてもということで行ったならば、
せめてもの礼儀として、一方にだけコメントを行うのではなく、
両方並行して行うべきである。
さて、
回答者の責務として出来る範囲では答えていこうと思うが、
現状で気になっている点は今のところ1つだけ。
「font001.TTF は日本語に対応したフォントか?」
余談になるけども、
font001.TTF は Microsoftが配布していたものだと思われるが、どうだろう?
仮にそうだとすれば、公の場で使って良いという書類を見たことはないので、
用途を自宅内や社内での実験用などと割り切っている場合を除けば、
ライセンス違反になるかもしれない。注意したいところだ。
font001.TTF は、実験用で「MSゴシック」です。本当は、自作フォントを使う予定ですが、ひらがな、カタカナ、数字 しか使えないし、わかりずらいので、使っています。
2013/03/24 12:11:39日本語に対応しています。