• 締切済み

Jcodeモジュールの代わりにjcode.plで代用可能でしょうか?

こんばんわ。前回質問したときに、 回答をしていただいた方、ありがとうございました。 原因は、結局のところ、サーバー会社の自分の使っているサーバーに ImageMagickがインストール?されていなかったみたいでした。 使えないのですが、(使用では使えることになっていた。) と、連絡したところ、無事使えるようになりました。 ありがとうございました。 ですが、実際、ImageMagickを使ってみて、 その機能の一部である、文字合成については英数字のみできました。 プログラムのuseにある、Jcodeが、働いていないみたいでした。 これはサーバーのサポート外なので、どうしようもないのですが。 そこで、思いついたのは、jcode.plを使って、なんとかならないかなー?と、思ったのですが、これはさすがに、無理でしょうか? 当然できたとしても難しいとは思うのですが、どうでしょう? 無理でしょうか? できるのでしょうか?できたとしても、かなり難しいのでしょうか? できるとしたら、どんな感じに組めばいいのか、参考になるアドバイスがいただけたらと、思っているのですが。 よろしくお願いします。 ↓は日本語が表示されなかった、プログラムです。 #!/usr/local/bin/perl -w use strict; use Jcode; use Image::Magick; # 画像を指定 my $file = "sample.jpg"; # 合成したい文字列 my $text = "ABC123日本語"; # UTF-8へ変換 $text = jcode($text)->utf8; # オブジェクト作成 my $image = Image::Magick->new; # 画像読み込み $image->Read($file); # 文字を記入する $image->Annotate(text=>$text, stroke=>'#FFFFFF', fill=>'#005599', font=>'sazanami-gothic.ttf', pointsize=>'36', x=>'20', y=>'40', encoding=>'UTF-8'); # 画像出力 print "Content-type: image/jpeg\n\n"; binmode STDOUT; $image->Write('jpeg:-'); undef $image; exit; よろしくお願いします。 ありがとうございました。 よろしくお願いします。

  • xphp
  • お礼率53% (24/45)
  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • kodomo55
  • ベストアンサー率57% (8/14)
回答No.1

ImageMagickの文字合成は、 UTF-8でエンコードされた文字以外では文字化けします。 ImageMagickの仕様です。 そして、jcode.plはUTF-8を扱うことはできず、 ここは素直にJcode.pmを利用する他ありません。 (PerlのバージョンによってはUTF-8の扱いも可能) 参考URLのページの下の方に書かれてある、 「Tarballを直接入手」という項目より、 ZIP版のJcodeをダウンロードして、展開したのち、 そこに含まれる Jcode.pm ファイルを use しているスクリプトと、 同一のディレクトリに置くことで利用できます。

参考URL:
http://openlab.ring.gr.jp/Jcode/index-j.html
xphp
質問者

お礼

返答ありがとうございました。 結局、プログラム中のフォントがサーバーにアップされていないのが原因でした。 ありがとうございました。(サーバーにはJcodeはインストールされていました。)

関連するQ&A

  • アイネットディーというレンタルサーバーでImageMagickを使って

    アイネットディーというレンタルサーバーでImageMagickを使って画像にテキストを合成しようとしています。 アイネットディーのページを見るとImageMagickは使えると書かれています。 (Version: ImageMagick 6.3.6 01/09/08 Q16 ) 実際画像の合成などはうまくできるのですが、なぜかテキストだけ合成ができません。 エラーは出ずにテキストを合成してもらいたいところには、何の画像も合成されていません。 同じプログラム(当然パスは変えますが)を他のサーバーで試してみると テキストを合成することができます。 my $font = $path."ttf/azukiB.ttf"; my $image = Image::Magick->new; $image->Read($backimage); $text = jcode($line,"euc")->utf8; $image->Annotate(encoding=>'UTF-8',font=>$font,pointsize=>10, fill=>'red', text=>$text, x=>10, y=>100); 書体を変えたり指定方法をいろいろ変えたのですがうまくいきませんでした。 アイネットディーまたはImageMagick 6.3.6では他に何か設定するのでしょうか。 どうすればテキストを合成できるのでしょうか。

    • ベストアンサー
    • Perl
  • JcodeモジュールとEncodeモジュール

    以下、Perl5.8でJcodeモジュールを使った場合とEncodeモジュールを使った場合の違いについて、知りたいです。 ※そもそもこのモジュールは同時に使ったらだめなのでしょうか? use strict; use utf8; use Jcode; use Encode; my $dat1 = "あイ卯(1)Iⅰ"; Jcode::convert(\$dat1, "utf8"); my $dat2 = "あイ卯(1)Iⅰ"; $dat2 = Encode::encode("utf8", $dat2); 文字コード変換の正しい使い方が知りたいです。

    • ベストアンサー
    • Perl
  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • Jcodeで変換できません。。。

    下記のCGI(文字コードはutf-8)を作成したのですが、正常に表示されません。 ~を上手に判定できていないということでしょうか??? また、もし、正しく変換できないのであれば、Jcodeで変換できない文字の一覧などあれば助かります。 分かる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-type: text/html;charset=Shift_JIS\n\n"; $str = "1~10"; use Jcode; Jcode::convert( \$str,"sjis","utf8"); print $str; 表示された結果 1?10 となりました。

    • ベストアンサー
    • Perl
  • Jcode.pmでconvertできない

    あけましておめでとうございます。 早速ですが、皆様のお力を拝借したく。 WindowsXPSP2+ActivePerl5.6.1でJcode.pmを使用して、utf8へ変換しようとしました。 http://okwave.jp/qa2600582.html を参考にJcode.pmを導入し(とある事情でインストールしておりません)、以下のソースを記述しました。 ちなみに"sjis"で記述しております。 #!/usr/local/bin/perl use lib "./lib"; use Jcode; $buf = "てすてすてす"; print "BeforeCode=".Jcode::getcode($buf)."\n"; Jcode::convert( \$buf, "utf8"); #$j = Jcode->new($buf); #$buf = $j->utf8; print "$buf\n"; print "AfterCode=".Jcode::getcode($buf)."\n"; exit; すると BeforeCode=sjis AfterCode=euc と表示され、"utf8"を指定したにも関わらず、"euc"に変換されてしまいました。 次に、上記ソースの中ほどを #Jcode::convert( \$buf, "utf8"); $j = Jcode->new($buf); $buf = $j->utf8; と書き換えてみました。すると、 BeforeCode=sjis Undefined subroutine &Jcode::_Classic::euc_utf8 called at lib/Jcode/_Classic.pm line 255. とエラーが出てしまいます。 見た感じeuc_utf8が存在しないと言われているようですが、Jcode\Unicode\NoXS.pmに存在しています。 環境に問題があるような気はしますが、どのようにすれば"utf8"への変換が成功するのでしょうか?ご教授いただければ幸いです。 ちなみに上記ソースで Jcode::convert( \$buf, "jis"); Jcode::convert( \$buf, "euc"); Jcode::convert( \$buf, "sjis"); はすべて成功し、指定した文字コードに変換されました。 "utf8"への変換だけが失敗するという状況で、新年早々頭を抱えております。

    • ベストアンサー
    • Perl
  • Image::Magickで画像に文字を埋め込む方法。

    こんばんわ。 perlで、画像に文字を入れたいと思います。 そこで、ppmからImage::Magickを入れました。 そして、test.plに以下の様に記述しました。 #!/usr/local/bin/perl use Image::Magick; $p = new Image::Magick; $p->Read("img.jpg"); $p = $p->Transform( geometry=>"240x320" ); $p->Annotate(font=>'C:\Windows\Fonts\arial.ttf', pointsize=>20, fill=>'white', text=>'TEXTTEXTTEXTTEXT', x=>200, y=>150); $p->Write("img.new.jpg"); そして、同じフォルダにimg.jpgを置きtest.plを実行したところ、 画像は215?×320になりましたが、 文字は記述されていませんでした。 Image::Magick perlなどで、検索しているのですが、 なかなか解説しているサイトはありませんでした。 Annotate()の記述が違うのではないかと思うのですが、 正しい書き方を教えて下さい。 どうすれば、文字を載せれるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • jcodeを使ったgetcode

    Perlで日本語を扱う際にjcode.plを使いたいと思いました。 問題点はgetcodeを使用した際に文字コードが出力されなかったということです。 'あ'はsjisと出るのですが 'a'は出力がありません。 文字コードが判別できなくてもなんらかの出力は得られるとWebで見たのでなぜ このような現象になるのか質問させていただきました。 参考にしたサイト http://www.mikeneko.ne.jp/~lab/kcode/jcode.html [ソース] #!/usr/local/bin/perl require './jcode.pl'; print "Content-type: text/html\n\n"; $line = 'あ'; $code = &jcode::getcode(\$line); print "print1 = $code\n"; $line = 'a'; $code = &jcode::getcode(\$line); print "print2 = $code\n"; [結果(コマンドプロンプト上)] Content-type: text/html print1 = sjis print2 = このようになる原因を知りたいです。回答や実行環境への質問などお願いします。 実行環境 1 OS: WindowsXP SP1a webサーバ: Apache 1.3.27 Perl: ActivePerl 5.8.0 ブラウザ: IE6.0 実行環境 2 infoseek無料webスペース

    • ベストアンサー
    • Perl
  • Jcodeによるカタカナ→ひらがな変換

    初めて投稿させていただきます。 Perlで半角カタカナをひらがなに変換しているのですが、 以下のような文字列は文字化けが起こってしまいます。 オウシュウシ イイオカ コシオウ アカサカ キョウサカエ オオスケ  オオキシ キキョウ ソウカシ なんとなく法則がありそうなのですが、それがどういう理由なのかがわかりません。 たとえば、「アカサカ」は「鐔縁酋鐔誌酋」と化けてしまいます。 しかし、「アカサカチョウ」とした場合は化けません。 以下のようなコードを作成しています。 use Encode; use Jcode; $iline="文字列"; Encode::from_to( $iline, 'CP932', 'utf8'); my $str = Jcode->new($iline)->h2z->tr("ァ-ン", "ぁ-ん")->utf8; $strをファイルに出力 といった感じです。 文字コードの関係が弱いので、何をどうしたら良いのか検討がつきません。 何か参考になることを教えていただければ幸いです。 Perlのバージョン5.8.5 サーバー Linux系

    • ベストアンサー
    • Perl
  • メールフォームで文字化けが出る

    http://okwave.jp/qa5038084.htmlの引き続きです。(メールフォーム) <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • shift-jisからutf8に変換

    解決に至らなかったので再度お尋ねします。 CGIのコードを見てくださいますか。 http://hotpegasus.bov.jp/mail.txt (必要な部分だけ表示しておりますので、そのままアップしても機能はしません) 改修した箇所は以下のです。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう