• 締切済み

マルチバイト文字を画像に書き込みたい

いつもお世話になっています。 画像に文字を書き込むプログラムを作成中なのですが、 日本語を書き込もうとすると文字化けを起こしてしまいます。 文字は、EUC-JPで処理するようにしています。 【index.php】にHTMLでフォームから値(文字列やフォントなど)をとり、 【a.php】で画像に文字を書き込む処理をし、 【index.php】で作成した画像を表示させるプログラムです。 マルチバイト文字を送信する際に、 $text=rawurlencode($text);  【index.php】 をし、【a.php】では、   $text=$_GET['text'];   $text=rawurldecode($text); をして、   imagettftext($im, $fontsize, 0, 12, $fontsize+8, $color, $font, $text); 書き込みを行っています。 マルチバイト文字を送信する際にこの方法が出来ない場合、他に方法があるのでしょうか?? 開発環境は、Windows XP、PHP5.2.5,Apache2.2です。 よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

使っているGDを日本語対応したものを使わないとダメです。 UNIXならあるのは知っていますが、Windows用は知りません。

yukari87
質問者

お礼

回答ありがとうございます。 UNIXはあるんですね! Windows用はわからないですか・・・ PHPのextというフォルダに【php_gd2.dll】があるのですが、 これは日本語対応ではないんですかね…? 調べてみようと思います^^

yukari87
質問者

補足

自己解決しました^^ エンコード・デコードではなく、修正前は、  $text = mb_convert_encoding($text, "EUC-JP", "auto"); でプログラムを作成していたのですが、  $text = mb_convert_encoding($text, "UTF-8", "auto"); に変更したら日本語も画像に書き込むことが出来ました。

関連するQ&A

  • 画像処理での文字の処理について

    formのtextareaから文字を受け取り、その文字を画像に書き込むプログラムを作成しています。 処理手順は、 1.[a.php]にあるtextareaに文字を入力   <textarea name="intxt" rows="10" cols="30"></textarea> (FORMのmethodはPOST)    2.submitで値を送信し、[b.php]で処理   [a.php]:print "<img border='0' src='b.php?imgfile=$imgfile&txt=$txt'>";      [b.php]:$imgfile=$_GET['imgfile'];/*画像*/        $txt=$_GET['txt'];    /*入力文字*/        文字を画像に書き込むときに、  aaa  bbb という風に画像に書き込みたいのですが、処理をすると  aaabbb  となります。 そこで私が考えた方法は、改行コードで文字列を切り取り、【 $text=explode("\n",$txt); 】 for文で書き込むという方法でしているのですが、うまく文字列を切り取れません。 改行コードが間違っているのでしょうか? それとも、改行コードでは切り取れないのでしょうか? 検索をかけてみたり、他の質問を見てみたのですが、うまく出来ませんでした。 それと、日本語で文字列を渡すためにはどのような関数を使えばよいのでしょうか? マルチバイト文字列はrawurlencode()を噛まさねば渡すことが出来ないというのはわかったのですが、 どういう風に噛ませるのかわかりません。 いろいろと試したのですが、表示されませんでした。 他にも方法があるのでしょうか? 開発環境は、PHP5.2.5、Apache2.2、WindowsXPです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字を画像として出力したい

    サイト上の情報などを頼りに、下記のようなコードを書きました。 <?php header("Content-Type: image/gif"); $size = 14; $text = "テスト"; $text = mb_convert_encoding($text, "UTF-8", "EUC"); $font = "/home/kymsweb/www/modx/assets/files/fonts/hgrsmp.ttf"; $bbox = ImageTTFBBox($size, 0, $font, $text); $h = $bbox[1] - $bbox[7] + 8; //縦 $w = $bbox[2] - $bbox[0] + 8; //横 $im = ImageCreate($w, $h); ImageColorAllocateAlpha($im, 155, 255, 255, 127); $chars = ImageColorAllocate($im, 155, 0, 255); ImageTTFText($im, $size, 0, 1, $h - 8, $chars, $font, $text); ImageGIF($im); ImageDestroy($im); exit; ?> これをそのままphpファイルとして保存し、サーバ上に転送し アクセスすると「テスト」という文字が画像として表示されます。 ここまでは分かったのですが。 これをさらに応用し、任意のhtmlファイル(正確には拡張子phpのファイルですが)の 中にこのコードを埋め込んで表示したいと考えていますが、当然ながら htmlソースにバイナリを同梱してしまうようなことはできません。 具体的には、CMSのプラグインを自前で作りたいと考えています。 たとえばタイトル画像を任意のフォントを使って画像として リアルタイムに書き出すような使い方です。 このような場合、どのような仕組みを考えるといいのか アドバイスをいただきたいです。

    • 締切済み
    • PHP
  • マルチバイト記号の可読性について

    プログラムのヘルプファイルをHTML形式で製作しています。 フォント設定で以下のように "Times New Roman"フォントを設定してテキストを書いていました。 -------------------------------------- <style type="text/css"> <!-- body { font-size: 1.1em; line-height: 1.1; font-family: 'Times New Roman'} --> </style> -------------------------------------- 文中で、マルチバイトの記号("⇒", "・")なども使ってしまったのですが これらの記号は海外のコンピータ上でも文字化けせずに読めるものでしょうか? (これらの記号を打ち出すとき、日本語で「やじるし」などと打ってから変換しています。) Times New Roman は矢印記号なども使えそうに思うのですが。

    • ベストアンサー
    • HTML
  • マルチバイト関数の呼び出し方

    WindowsXP上でApache2.0.54とPHP5.0.4を使ってPHPのテストサーバを立てたのですが、マルチバイト関数をまったく読み込んでくれません。 PHPのコアファイルなどを "C:\Program Files\" 以下に "PHP 5.0.4" と言うフォルダをつくり、そこに保存してあります。Apacheの設定ファイルでPHPのモジュールをそのフォルダから呼び出して、うまくPHPが動作しました。また、PHP.ini上でextensionを "C:\Program Files\PHP 5.0.4\ext\" から読み出すようにしました。もちろん、extension一覧にあるphp_mbstrings.dllのコメントははずしてあります。 どのようにしたら、マルチバイト関数を呼び出せますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字化け(Shift-jis→UTF-8変換)で困ってます。

    フォームから送信されたShift-jisの文字列をUTF-8に変換して、ImageTTFText関数を使用して画像として表示させようとしているのですが、文字化けをしてしまって困っています。 入出力はShift-jisで、内部処理はUTF-8で行いたくて色々実験してみたのですが、どうにもうまくいきません。 以下にソース・環境を載せますので、どなたか、間違いをご指摘いただけないでしょうか? なるべくPHP.iniの設定は変えないで対処したいです。 どうか、よろしくお願いいたします。 【サーバのPHP.iniの設定(PHP ver.4.3.9)】 mbstring.detect_order = auto mbstring.encoding_translation = off mbstring.http_input = auto mbstring.http_output = SJIS mbstring.internal_encoding = EUC-JP mbstring.language = Japanese 【使用しているソース】 <?php mb_language("ja"); mb_internal_encoding("UTF-8"); mb_http_input("SJIS"); mb_http_output("SJIS"); // 表示する文字列 $str = mb_convert_encoding($_GET["txt"], "UTF-8", "SJIS"); // 画像サイズ define ( IMGWID, 300 ); define ( IMGHEI, 300 ); // フォントサイズ define ( FONTSIZE, 20 ); // 文字のスタート位置 define ( START_X, 10 ); define ( START_Y, 50 ); // 生成画像 $img = imagecreatetruecolor ( IMGWID, IMGHEI ); // フォント色 $fntc = ImageColorAllocate ( $img, 255, 255, 255 ); // 使用するフォント define ( FONTTYPE, '../font/DFKaiE.ttf' ); // フォントパスの設定 putenv ( 'GDFONTPATH='.realpath('.') ); $x = START_X; $y = START_Y; // 入力された文字を書き出し ImageTTFText ( $img, FONTSIZE, 0, $x, $y , $fntc, FONTTYPE, $str ); header ( "Content-type: image/jpeg" ); ImageJpeg ( $img ); ImageDestroy ( $img ); ?>

    • 締切済み
    • PHP
  • PHPマルチバイト文字列関数

    FedoraCore4のPHP-version5.0.4 rpmをインストールしたのですが、マルチバイト文字関数が標準になっていないのでマルチバイト文字関数が使えるようにしたいのです。 今のところ一度PHPをアンインストールして、ソースを落としてきて、configureの時にオプションで指定して対応しようかと考えています。 しかし、超初心者ですのでもう少し簡単な方法を探しています。ご存知の方はぜひご教授いただきたいと思います。 よろしくお願いいたします。

  • マルチバイトのチェック

    文字を格納した変数に、マルチバイトが含まれていたらtrue無ければfalseみたいな処理がしたいのですが、どのようにすればよいでしょうか?

    • ベストアンサー
    • PHP
  • マルチバイト関数

    今ちょうどマルチバイト関数について勉強(独学)してるところなのですが マルチバイト関数をプログラム中で使えません。 私のプログラムが間違ってるのかと思い、サンプルをそのままコピーしたもの。 それを実行してみたのですが結果は同じでした。 Fatal error: Call to undefined function mb_substr() in C:\...\4-1.php on line 3 といったようなエラーです。 上手く設定がいってないのかなとphp.iniを見直すことにしました。 今phpのモジュールはC:\phpに解凍した中のextに入ってます。 ですから extension_dir = "C:\php\ext" といった風に設定しました。そして extension=php_mbstring.dll のように書きました。 C:\php\ext以下にこのphp_mbstring.dllが存在することは確認済みです。 テキストではこれで上手くいっているのでApacheを再起動して実行してみましたが どうしても先ほどのエラーが出て先に進みません。 いったいどうすれば使えるようになるのか教えていただけませんか?

    • ベストアンサー
    • PHP
  • データベースに登録済みの文字を抽出し、文字を画像化するプログラムを作成

    データベースに登録済みの文字を抽出し、文字を画像化するプログラムを作成したいと思っています。 文字情報から画像を作成するプログラムをJavaで作成するにはどうすれば良いのでしょうか? できれば、プログラムで自前で作成したいのですが、ツール等を購入する必要がありましたら 併せて教えて頂きたいです。 画像のサイズ、色、文字フォント等は固定で構いません。 OSはLINUXです。

  • 画像に文字を入れて出力

    いつもお世話になってます。 phpで、画像に文字を入力して出力(画像として)したいのですが 画像を育成し、そこに文字を入力して画像として出力 というようなスクリプトは多く見つけられました(以下の通り) --- <?php Header("Content-type: image/gif"); $im = imagecreate(400,30); $black = ImageColorAllocate($im, 0,0,0); $white = ImageColorAllocate($im, 255,255,255); ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Testing... Omega: Ω"); ImageGif($im); ImageDestroy($im); ?> --- 元々用意した画像に文字を入力して出力させる事は可能でしょうか?

    • ベストアンサー
    • PHP