ImageTTFTextで文字が表示されない問題について

このQ&Aのポイント
  • ImageTTFTextを使用して画像に文字を埋め込んだ際、保存すると文字が表示されない状態になります。
  • 指定した画像(jpeg)には文字が正常に埋め込まれ、出力はできますが、保存したときに文字が消えてしまいます。
  • 提供されたソースコードには問題がないように見えますが、保存時に何か問題が起きている可能性があります。
回答を見る
  • ベストアンサー

ImageTTFTextで保存すると文字が表示されない

指定した画像(jpeg)に文字を埋め込みをして 出力は出来たのですが、 保存をすると文字が無い状態で保存してしまいます。 以下のようにソースは書いております。 <?php Header ("Content-type: image/jpeg"); $image=imagecreatefromjpeg("aaa.jpg"); $txt = mb_convert_encoding($_POST["moji"], "UTF-8", "SJIS"); ImageTTFText ($image, 9, 0, 60, 45, 0, "HGRSGU.TTC",$txt); //jpeg画像作成 imagejpeg($image); //画像リソースの開放 imagedestroy($image); ?> おかしいと思われるところ等御座いましたらご教授願います。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

埋め込んだ画像を保存する処理をしてないためです //jpeg画像表示 imagejpeg($image); //jpeg画像保存 imagejpeg($image, "newimage.jpg"); //画像リソースの開放 imagedestroy($image);

yamadachan
質問者

お礼

ありがとうございます。 画像がnewimage.jpgで、文字も表示された状態でnewimage.jpgに保存されました。 jpeg画像保存しないと重ねた画像は取得出来ないのでしょうか? 出来れば新しい画像を作らずにと思ったのですが。 同じファイル名で作るのは、不特定多数の人が文字を指定出来、出力出来るようにしたいので避けたいです。

関連するQ&A

  • *******imagetext.php***************

    *******imagetext.php***************:: <?php //画像(JPEG)ヘッダを追加 header("Content-type: image/jpeg"); //作成する画像の設定 //幅 $width = 400; //高さ $height = 100; //画像を作成 $img = imagecreate($width, $height); //色の設定(背景/文字列) imagecolorallocate($img, 255, 255, 255); $textcol = imagecolorallocate($img, 255, 0, 0); //書き込む座標 $x = 50; $y = 50; //文字サイズ $size = 20; //角度 $r = 0; //フォントファイルへのパス $font = "C:/WINDOWS/Fonts/MSGOTHIC.TTC"; //画像に文字列を書き込む $string = "文字列を書き込む"; $string = mb_convert_encoding($string, "UTF-8", "SJIS"); imagettftext($img, $size, $r, $x, $y, $textcol, $font, $string); //画像を出力 imagejpeg($img); ?> ************************** MSゴシックのファイルパスはこのように設定しています。 C:/WINDOWS/Fonts/MSGOTHIC.TTC エラーっぽいような文字化け画面になってしまいます。 質問1>>上記のような症状を解決するには? 質問2>>上記のことを解決したうえで、      //画像を出力      imagejpeg($img);      の部分をなくして、      //画像をファイルへ保存      ??????      へ変更するにはどのようにすればいいですか?

    • ベストアンサー
    • PHP
  • 「imagejpeg」(GD)で作成した画像を保存できない

    <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> http://www.php.net/manual/ja/function.imagejpeg.php を参照して(そのまま利用して)、画像を作成して表示させてみました。 すると、これはその通り、うまく画像が表示されました。 しかし、 <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // 【追加分】: 画像を保存する imagejpeg($im, 'new.jpg'); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> のように imagejpeg($im, 'new.jpg'); を挿入して、その画像を保存しようとしているのですが、うまくいきません。(何も起こりません。) ちなみに、保存するためのディレクトリのパーミッションはその親ディレクトリを含め、(7,7,7)です。 「new.jpg(相対パス)」を「/www/.../new.jpg」のように絶対パスを使ってやっても結果は同じでうまくいきませんでした。 どのようにすれば、新しく作成した画像を保存できるのでしょうか? ちなみに、OSはLinux(Fedora10)です。もちろん、GDは先のテストで証明される通り、動作していると思います。 よろしくお願い致します。

    • 締切済み
    • 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
  • GDで生成したはずの画像が文字列として表示される!

    PHP初心者です。いろいろ調べたのですが解決策が見つかりません。なんとか解決策を教えてください。よろしくお願いします。 imagejpeg()で画像を生成したつもりなのですが、文字列として下のように表示されてしまいます。 ・・ JFIF ・>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality 棧C $.' ",# (7),01444 '9=82<.342棧C 2! !2222222 画像データがそのまま文字で打ち出されているようです。 こちらの環境は、 ・さくらインターネットの共用サーバー ・php.iniはデフォルトのまま ・文字コードは、euc-jp ソースは以下の通りです。 <?php Header ("Content-type: image/jpeg"); $test = imagecreate(200, 200); $bcolor = imagecolorallocate($test, 0, 0, 0); imagejpeg($test); imagecolordeallocate ($test,$bcolor); imagedestroy($test); ?>

    • ベストアンサー
    • PHP
  • phpでテキストを返す

    html側で <img src="./image.php" /> php側で header("content-type: image/jpeg"); imagejpeg($image); imagedestroy($image); とすると、画像が表示されますが、 これを画像ではなく、テキストで返すにはどのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • jpeg画像を表示する方法

    質問させてください。 ボタンが押されると画像が表示されるプログラムを作成したのですが、画像部分が文字化けされた文字として表示されます。 <html> <head> <title>おみくじ</title> </head> <body> <CENTER> <form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>"> <input type="submit" value="おみくじ" name="button"> </form> <?php if (isset($_GET["button"]) && $_GET["button"] !== "") { $image_in = imagecreatefromjpeg("img/omikuji.JPG"); header ( "Content-type: image/jpeg" ); imagejpeg ($image_in); imagedestroy($image_in); } ?> </CENTER> </body> </html> phpのソースを丸々別ファイルにするという方法もとったのですが、状況は変わりませんでした。 どなたかお知恵をお貸しください。

    • ベストアンサー
    • PHP
  • image関数でMS Pゴシックを使いたい、太字を使いたい

    TrueTypeフォントを利用しています。 出力する文字列をMS Pゴシック、太字として出力するにはどうすれば良いのでしょうか? $string1 = "あいうえお"; $string2 = "かきくけこ"; $font = 'msgothic.ttc'; ~~ 中略 ~~ mb_convert_variables('UTF-8', 'SJIS', $string1); mb_convert_variables('UTF-8', 'SJIS', $string2); imagettftext($id, 12, 0, 5, 20, $black, $font, $string1); imagettftext($id, 12, 0, 80, 40, $black, $font, $string2); imagettftext($id, 12, 0, 81, 40, $black, $font, $string2); 今は仕方なく$string2を出力する位置をズラして、 太字っぽくしています。 MS Pゴシックが使いたいのですが、別の指定方法などがあるのでしょうか?

    • 締切済み
    • PHP
  • PHP GD 画像リサイズ

    PHP+GDで携帯サイト用の画像リサイズ処理させるプログラムを書籍のサンプルプログラムを元に作成していますが画像が表示されません。 GD:ver2.17 $image_data = @imagecreatefromjpeg($image_file); $output_image_data = @imagecreatetruecolor($output_image_x, $output_image_y); @imagecopyresampled($output_image_data, $image_data, 0, 0, 0, 0, $output_image_x, $output_image_y, $image_x, $image_y); header('Content-Type: image/jpeg'); @imagejpeg($output_image_data); @imagedestroy($image_data); @imagedestroy($output_image_data); 動作確認は携帯とPC両方でやってますが、携帯だと画像表示されず×が表示され、PCだと文字化けした文字が出力されます。 PCで所々デバック文を表示させたりして確認したところimagecopyresampled関数ではTRUEが返ってきておりましたが、imagejpeg関数以降のデバック文が表示しませんでした。 初心者なのでうまく説明できなくてすいません。 お手数ではございますがご教授お願いします。

    • ベストアンサー
    • PHP
  • phpでheader関数を用いた画像表示について

    $image = imageCreateFromJPEG($_FILES["upfile"]["tmp_name"][$i]); header(content-type: image/jpeg); imageJPEG($image); で画像を表示させたいんですが Wanning : cannot modify header information - headers already sent by~~ と警告が出て文字化けしてしまします 色々調べてみるとこのheader関数の前にはいかなる出力もダメというのがわかったんですが テンプレートを使用していて、どうしても途中で出力せざるをえないんですが何かいい方法はありませんか?

    • ベストアンサー
    • PHP
  • PHPでGDライブラリを使って縮小した画像を直接表示したい

    PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。 -----reimage.php--------------------- <?php header("Content-Type:image/jpeg"); $old_width=800; $old_height=222; $width = htmlspecialchars($_GET['w']); $height = ($old_height / $old_width) * $width; $source = imagecreatefromjpeg("image.jpg"); $re_image = imagecreatetruecolor($width,$height); imagecopyresampled($re_image,$source, 0, 0, 0, 0,$width, $height, $old_width, $old_height); imagejpeg($re_image); imagedestroy($re_image); ?> -------------------------- 他のHTMLファイルから <img src="reimage.php?w=480"> などとすると縮小された画像が表示されるのですが、直接「reimage.php?w=480」を開くと、文字化けした文字列が並んでいるばかりで画像が表示されません。 firefoxでMIMEタイプを見てみると、「text/html」になっています。 >header("Content-Type:image/jpeg"); の部分がうまくいっていないのだと思いましたが、どう直せばいいのか分かりません。 なお、サーバーはxreaの広告免除を使っています。 まだPHPを勉強し始めて日が浅いので、見当違いなことを聞いているかも知れませんが、よろしくおねがいします。

    • ベストアンサー
    • PHP

専門家に質問してみよう