ホームページ >バックエンド開発 >PHPの問題 >PHPのimagestringで中国語が文字化けした場合の対処法

PHPのimagestringで中国語が文字化けした場合の対処法

藏色散人
藏色散人オリジナル
2020-08-19 09:32:483065ブラウズ

php imagestring 中国語の文字化けは、GD2 ライブラリ自体に中国語フォントがないことが原因であり、出力文字列を表示するフォントを指定することで解決できます。

PHPのimagestringで中国語が文字化けした場合の対処法

# 推奨: 「

PHP ビデオ チュートリアル

imagestring 関数で中国語の文字化けが表示される

1. 問題の説明

私が画像に透かしを入れる方法を学んだとき、PHP の組み込み GD 拡張関数ライブラリと、ビデオ チュートリアルで使用されている画像文字列 ( resource $image 、 int $font 、 int ) を使用しました。 $x , int $y, string $s, int $col) 関数ですが、実際のアプリケーションでは、この関数は中国語の透かしを正常に表示できず、中国語の文字化けを表示することが判明しました。

2. 解決プロセス

公式 Web サイトの PHP マニュアルを参照すると、 imagestring: 文字列を水平方向に描画し、imagestring() が Col color を使用して文字列 s を画像の x に描画します。 y 座標の image で表されます (これは文字列の左上隅の座標であり、画像全体の左上隅は 0, 0 です)。フォントが 1、2、3、4、または 5 の場合は、内蔵フォントが使用されます。

この関数の 2 番目のパラメータ $font はフォントパラメータですが、公式には値を 1 ~ 5 に設定すると内蔵フォントが使用されるとしか記載されていません。いわゆる内蔵フォント1~5が正常ではないことが判明しました。中国語を表示します。また、1~5以外の他の値や他のフォントファイルが使用できるかどうかは公式ドキュメントには説明されておらず、テストの結果、このパラメータを他のフォントファイルに設定すると正常に使用できないことが判明しました。

関連するコンテンツをオンラインで検索したところ、ほとんどの場合、中国語の表示に失敗するのは、GD2 ライブラリ自体に中国語フォントがないことが原因であることがわかりました。出力文字列を表示するには、を指定する必要があります。画像上に中国語を出力したい場合は、imagettftext (resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text) 関数を使用する必要があります。この関数の正式な説明は次のとおりです: TrueType フォントを使用して画像にテキストを書き込む

この関数の 2 番目のパラメータもフォント ファイルであり、ttf 形式のフォント ファイルを指す必要があります。中国語は正常に表示できることが分かりました。 $fontはフォントファイルのパスで、フォントファイルがphpファイルと同じディレクトリにある場合はフォントファイルの名前になります。

さらに、PHP マニュアルには、別の imagefttext (resource$image, float$size, float$angle, int$x, int$y, int$color, string$fontfile, string) があることがわかりました。 $text [, array$extrainfo ] )t 関数,

この関数の正式な説明は次のとおりです: FreeType 2 フォントを使用して画像にテキストを書き込みます。上記の imagettftext 関数とよく似ています。参照するフォントファイルの種類が違うだけなので、この機能を使えば中国語も表示できるかも知れません。しかし、私はそれを試すのが面倒です。 。 。興味があれば試してみてください。

Ubuntu では使用するフォントファイルが php と同階層のディレクトリに置かれていることを偶然発見し、ファイル名が $font の場合は機能が有効にならないことが分かりました。エラー ログをクエリして imagettftext() を見つけました。フォントが見つからない/開くことができませんでした。Baidu クエリを通じて、Linux システムでは $font をファイル名として設定するだけでは不可能であることがわかりました。また、指定する必要があります。 「./xxx.ttf」(相対パス)または「/usr/share/fonts/xxx.ttf」(絶対パス)などのパス。テストの結果、正常に表示できることが確認されました。

3. 概要:

Imagestring では中国語を正常に表示することができません。他の方法があるかもしれません。ただし、フォント ファイルをインポートするだけで済む、簡単で便利な imagettftext を使用することをお勧めします。

imagettftext 関数の $font パラメータは、ウィンドウ システムではファイル名に設定するだけで済み、フォント ファイルは現在のディレクトリで検索されますが、Linux システムではパスが必要です。 ./. を指定する必要があります。

以上がPHPのimagestringで中国語が文字化けした場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。