画像の文字化け問題を解決する方法

このQ&Aのポイント
  • 画像の文字化け問題を解決するには、文字列をUTF-8に変換してから書き込む必要があります。
  • また、フォントファイルへのパスも正しく指定する必要があります。
  • 文字列の書き込み後、画像を出力する際には、imagejpeg関数を使用します。
回答を見る
  • ベストアンサー

*******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);      の部分をなくして、      //画像をファイルへ保存      ??????      へ変更するにはどのようにすればいいですか?

noname#129137
noname#129137
  • PHP
  • 回答数1
  • ありがとう数4

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

  • ベストアンサー
  • Hohenheim
  • ベストアンサー率18% (43/237)
回答No.1

質問1>>GDでは拡張子.ttfのフォントしか扱えません。別のフォントファイルを指定してみてください。 質問2>>スクリプトの末尾を下記のようにします。 header("Content-type: image/jpeg"); header("Content-Disposition: attachment; filename="ダウンロードさせたいファイル名"); imagejpeg($img);

noname#129137
質問者

お礼

ご丁寧に有難うございました。 参考にさせていただきます。

関連するQ&A

  • FLASHとPHPの連携について

    プログラミング初心者です。 いまポストカード作成システムを大学の課題で作っています。 環境はWindowsXP FLASH8Proです。 最後の保存するところで詰まっています。 現時点でできているところまでHPにアップしたので載せます。 ​http://www.geocities.co.jp/ysmnh028/otameshi.html​ URLより画像を読み込み最後に保存をしたくていろいろ調べていて、PHPと連携させてブラウザ上に新しいページで画像を生成し、それを右クリック⇒保存という形で保存できる事はわかりました。 SAVEボタンのASは以下のとおりです。 on (press) { // 保存用Bitmapを生成 var bmpSnap = new flash.display.BitmapData(300, 444, false); // 保存したいMovieClipをBitmapに描画する bmpSnap.draw(_root.photo_mc); // BitmapデータをRGB配列にする var img_data = new Array(); for (var x = 0; x<bmpSnap.width; x++) { for (var y = 0; y<bmpSnap.height; y++) { var col = bmpSnap.getPixel(x, y); img_data.push(("000000"+col.toString(16)).substr(-6, 6)); } } // データを送信 System.useCodepage = true; myLoader = new LoadVars(); myLoader.img_width = bmpSnap.width; // 画像幅 myLoader.img_height = bmpSnap.height; // 画像高さ myLoader.img_data = img_data.join(""); // 画像データ myLoader.send("snapshot.php", "_blank", "POST"); } PHP側は <?php // 送信データを取得 $img_data = $_POST['img_data']; $width = $_POST['img_width']; $height = $_POST['img_height']; $type = $_POST['img_type']; // IMAGE生成 $source_img = imagecreatetruecolor ($width, $height); // 背景色を生成 $bg_col = imagecolorallocate($source_img, 0xFF, 0xFF, 0xFF); $border_col = imagecolorallocate($source_img, 0x00, 0x00, 0x00); // イメージを描画 $p = 0; for ($x = 0; $x < $width ; $x++) { for ($y = 0; $y < $height ; $y++) { $rgb = hexdec(substr($img_data, $p, 6)); $p+=6; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $col = imagecolorallocate($source_img, $r, $g, $b); imagesetpixel($source_img, $x, $y, $col); } } header("Content-Type: image/jpeg"); imagejpeg($source_img); exit; // JPEG出力 touch("test.jpg"); // まずは空ファイル生成 imagejpeg($source_img, "test.jpg"); // 画像を保存 header("Content-Type: image/jpeg"); readfile('test.jpg'); exit; ?> 以上です。 ローカルでためしたところ画像は表示されず、かわりに代替画像としてアドレスが表示されます。 考えられる原因はなんでしょうか?? よろしくお願いします。

    • 締切済み
    • 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
  • PHP GD 画像が縮小できない

    宜しくお願いします。 ※ローカル環境です。 (WinXP PHP5 Smarty PEAR MySQL ※GDはインストされています。) 下記のコードで、サーバーにもともと上げてある画像(jpeg)を縮小して、 それをブラウザに表示させようと思います。 ですが、縮小されずに、元の画像サイズのまま表示されてしまいます。 おかしな点をご指摘下さいませ。 また、(1)で、 jpegファイルを取り込むコードがありますが、これは、 もし画像がGIFであったりPNGの場合を顧慮するなら、 取り込む際にそれぞれを判定するのが基本でしょうか? もし、今回のようにサバー元の画像をリサイズするのであれば、拡張子もわかっていますので、 jpegファイルだけのことを考えればいいですが、 たとえば、任意のアップロードされたファイルを扱う場合は、上記3種類を判定すして処理すべきですよね? 以上、2点を回答下さいませ。 // -- (1) // 画像を読み込む。 $file_path = "http://www元画像.com/img/aa.jpg"; $image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む /*********** $image = ImageCreateFromGIF($file_path); //GIFファイルを読み込む $image = ImageCreateFromPNG($file_path); //PNGファイルを読み込む ************/ // -- (2) // 画像のサイズを取得。 $width = ImageSX($image); //横幅(ピクセル) $height = ImageSY($image); //縦幅(ピクセル) // -- (3) // 縮小した画像のサイズを決める。 $new_width = 100; $rate = $new_width/$width; //圧縮比 $new_height = $rate*$height; // -- (4) // 空の画像を作成する。 $new_image = ImageCreateTrueColor($new_width, $new_height); // -- (5) // サンプリングしなおす  ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height); // -- (6) // ブラウザに出力する場合。 ImageJPEG($image); //ImageJPEG($image,'simpletext.jpg'); //ImageGIF($image); //環境によっては使えない //ImagePNG($image); // -- (7) // メモリを解放する。 imagedestroy ($new_image); imagedestroy ($image);

    • ベストアンサー
    • PHP
  • PHPについて教えてください。

    $RSS_data = simplexml_load_file($RSS_url); foreach($RSS_data->Items->Item as $value){ $img[] = "<img src=\"{$value->Image->URL}\" width=" 200 " height=" 200 ">"; } for ($i = 0, $n = count($img); $i < $n; $i++) { if (($i / 6) == 1) { echo $img[$i] . "<br />"; } else { echo $img[$i]; } } 上記の文でパースエラーがでました。エラーのラインは $img[] = "<img src=\"{$value->SmallImage->URL}\" width=" 200 " height=" 200 ">"; です。 width=" 200 " height=" 200 "  これを取るとエラーがでずに通ります。画像のサイズを指定したいのですが、このやり方駄目ならどうすればいいのでしょうか? あと、やりたいことは画像を7つ表示したら改行して、また下に画像を7つ並べることを繰り返す。 というようにしたいのですが、このやり方だと1列目は7つでちゃんと改行されるのですが、2列めからは改行されずに画像が並んでしまいます。 どうすればいいでしょうか?どちらかだけでもいいのでわかる方教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • PHPのGD関数を用いた文字出力について

    以下の、PHPのGD関数を用いたスクリプトにおいて、「男女別表示」という 文字が出力されません。どこが間違っているのか教えていただきたいです。 ちなみに、MSゴシックのフォントは、自パソコンの中に存在しています。 <?php $im = imagecreatetruecolor(601, 801); // 1ピクセル多めなキャンバスを作る // タイトル $font = "c:\windows\fonts\msgothic.ttc"; $jstr="男女別表示"; $jstr=mb_convert_encoding($jstr, "utf-8", "auto"); $color = imagecolorallocate($im, 0, 0, 0); imagettftext($im,100,30,150,45,$color,$font,$jstr); // 出力し、メモリを開放します header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?>

    • ベストアンサー
    • PHP
  • PHPバッファリングで出力した文字列をセッションで

    こんんばんは。この度もよろしくお願いします。 phpを勉強中の者です。 GDを使って画像をリサイズし、ブラウザに表示したり、データベースに保存したりしたいです。そこで、質問なのですが、バッファリングで出力した文字列をセッションで使うことはできないのでしょうか? 以下のようにしてみましたが、別ページで引き継ぎできません。 セッションで使うためにはどうすれば良いのでしょうか。 そもそもセッションでは使うことができない……まるっきり私の理解が間違っているのでしょうか。 よろしくお願いします。 $filename = 'test.jpg'; $percent = 0.5; list($width, $height) = getimagesize($filename); $new_width = $width * $percent; $new_height = $height * $percent; $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); ob_start(); imagejpeg ($image_p); $img = ob_get_contents(); ob_end_clean(); $_SESSION['img'] = $img; ←できません!

    • ベストアンサー
    • PHP
  • [PHP]GDを利用した画像リサイズについて

    [PHP]GDを利用した画像リサイズについて GDを利用した画像リサイズ処理を行うクラスを作ったのですが、 以下のようなエラー(文字化け)が出てしまい画像出力することができません。 有識者の方、どうか知恵をお貸しください。宜しくお願い致します。 ????JFIF??;CREATOR: gd-jpeg v1.0 (using IJG JPEG v70), quality = 75 ??C    $.' ",#(7),01444'9=82<.342??C  2!!22222222222222222222222222222222222222222222222222??II"?? ???}!1AQa"q2???#B??R??$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????? ???w!1AQaq"2?B???? #3R?br? -------- 以下省略 ---------- ◆作成したPHPファイル ・test.php <?php require_once 'Image.php'; $path = './400x300.jpg'; $r = new Image($path, 75); $r->resize(75); ?> ・Images.php <?php class Image{ var $new_width; var $path; function Image($path, $new_width){ @header("Content-type: image/jpeg"); $this->path = $path; $this->new_width = $new_width; } function resize(){ global $new_width; global $path; // 画像パス $image = imagecreatefromjpeg($this->path); // 画像のサイズを取得 $width = 150; $height = 150; $rate = $this->new_width / $width; $new_height = $rate * $height; $thumb = imagecreatetruecolor($this->new_width, $new_height); imagecopyresized($thumb, $image, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); // imagecopyresampled($thumb, $image_path, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); imagejpeg($thumb, null, 75); imagedestroy($image); } } ?> ◆環境と状況 ・サーバ:WindowsXP(XAMPPを利用してローカル環境を構築) ・phpinfo()にて、GD Support=enabled、JPEG Support=enabledを確認 ・ステップ実行(デバック)にてimagejpeg($thumb, null, 75);まで問題なく実行可能。  ※imagejpeg($thumb, null, 75);実行後上記文字列が出力される。 ・コメントアウト個所のimagecopyresampledでも動作結果は同じ。 ・参考にしたサイト  http://goodjob.boy.jp/chirashinoura/id/79.html 恐れ入りますが、ご回答お願い致します。

    • ベストアンサー
    • PHP
  • MSGOTHIC と MSMINCHO フォントの修復について

    Windows XP のフォントには MSGOTHIC.TTC MSMINCHO.TTC が初期からありますよね。 C:\WINDOWS\Fonts の中で詳細表示すると [ファイル名 ファイル名 サイズ 更新日時 属性] と分けられていて、最初のファイル名には MSGOTHIC.TTC の場合 MS Gothic & MS PGothic & MS UI Gothic と MS ゴシック & MS Pゴシック & MS UI Gothic があったと思います。 同様に MSMINCHO.TTC も英語表記と日本語表記が あったと思います。 このうち英語表記の2つを失ってしまいました。 今のところ目立った文字化け等はないのですが なにかおかしくなっているのでしょうか? できれば修復したいのですがどうすればよいでしょう? どなたかわかる方よろしくお願いします。

  • PHPの関数の使い方が分かりません。

    お世話になります。 目的は、関数で縮小した画像を4枚、座標を指定して表示させることです。 以下のような、PHPのプログラムを組んで、実行したのですが、 画像が1枚だけ縮小された状態で表示され、うまく行きません。 <?php //4つの同じサイズの縮小画像を表示させたい。 for ($i = 0; $i < 4; $i++) { // ファイルと新規サイズ $filename = 'pr-01.jpg'; //同フォルダ内の画像ファイル名 $percent = 0.2; //縦横比0.2倍のサイズへ。 // コンテントタイプ header('Content-Type: image/jpeg'); // 新規サイズを取得します list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // 読み込み $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // リサイズ imagecopyresized($thumb, $source, $i*100, $i*100, 0, 0, $newwidth, $newheight, $width, $height); // 出力 imagejpeg($thumb); } ?> これについて、教えて下さい。 お願い致します。

    • ベストアンサー
    • PHP
  • 画像のアップに関して

    画像のアップロードしたいのですが、 下記の記述方法でアップしようとすると エラーメッセージで 「Warning: imagejpeg() [function.imagejpeg]: Unable to open '../members/img/38.jpg' 」 と表示されてうまく行きません。初歩的なミスかもしれませんが 御指導お願い致します。 なお下記の  $upload = "../members/img/";  $new_pic = "../members/img/"; を  $upload = "./img/";  $new_pic = "./img/"; とうまく表示されるのですが、どうしてかわかりません。 御指導お願い致します。 if ( $_SERVER['REQUEST_METHOD'] == "POST" ) { $target = $_FILES['MyUploadFile']['name']; $target = strtoupper($target); $ext = array("JPG","JPEG"); $file_ok = false; foreach( $ext as $Value ) { $target2 = basename( $target, $Value ); if ( strlen( $target2 . $Value ) == strlen( $target ) ) { $file_ok = true; break; } } if ( $file_ok ) { if ( is_uploaded_file( $_FILES['MyUploadFile']['tmp_name'] ) ) { $upload = "../members/img/"; $upload .= $_FILES['MyUploadFile']['name']; $new_pic = "../members/img/"; $new_pic .= $job_id .".jpg"; # テンポラリディレクトリにある実際のファイル $file = $_FILES['MyUploadFile']['tmp_name']; # ファイルの属性等を取得 $target = getimagesize( $file ); # 現在のサイズ $width = $target[0]; $height = $target[1]; # 新しいサイズ $width_new = 250; $height_new = (int)( ($height/$width)*$width_new ); # JPEG の場合 if ( $target[2] == IMAGETYPE_JPEG ) { # 元のファイルのハンドル $jpeg = imagecreatefromjpeg ( $file ); # 新しいイメージ $jpeg_new = imagecreatetruecolor( $width_new, $height_new ); # サイズ変更して新しいイメージへ転送 $ret = imagecopyresampled( $jpeg_new, $jpeg, 0, 0, 0, 0, $width_new, $height_new, $width, $height ); if ( !$ret ) { print "サイズ変更に失敗しました\n"; return; } # JPEG ファイルとして、クオリティ 100 で出力 $ret = imagejpeg ( $jpeg_new, $new_pic, 100); if ( !$ret ) { print "ファイル作成に失敗しました\n"; return; } print "アップロードが完了しました\n"; print "<IMG src='$new_pic'>"; } } else { print "アップロードに失敗しました\n"; } } }

    • ベストアンサー
    • PHP

専門家に質問してみよう