2

画像から IPTC データを読み取る場合、PHP 経由で読み取ったときに UTF-8 アクセント付き文字が正しく表示されません。

例: é、ø、ü

ヘッダーの content-type を文字ではなく UTF8 に設定すると、黒いひし形にクエスチョン マークが表示されます。� content-type が設定されていない場合、ダッシュ文字が表示されます: —</p>

以下は、IPTC ブロックを読み取るために使用されているコードです。

$file = '/path/to/image.jpg';
getimagesize($file, $info);
$iptc = iptcparse($info['APP13']);

また、まったく同じ画像を同じサーバー上の WordPress インストールにアップロードしようとしましたが、アクセント付きの文字が適切に削除され、基本的なラテン文字に置き換えられます。これが最終結果であってもかまいませんが、文字を正しく読みたいだけです。

画像から完全で正しいデータを取得する方法についてのアイデアはありますか?

4

2 に答える 2

4

回答は少し遅れましたが、č š ž(スロベニア語のアルファベットで表示される)特殊文字の表示と同じ問題が発生したため、後で参照できるように回答することもできます。

この問題の解決策は、実際にはphpではなく、IPTCデータエンコーディングに関連しています。デフォルトでは、IPTCデータを書き込むことができるほとんどのソフトウェアは、プレーンASCIIでデータを保存します。最初はAdobeBridgeを使用しましたが、画像のタグ付けを開始すると、実際にはすべての特殊文字が表示されますが、PHPでそのデータを解析すると、実際には特殊文字は表示されません。(この部分をもう一度確認する必要がありますが、主な問題は、2つの異なるエンコードが発生することです。1つは画像上のIPTCデータをエンコードし、もう1つはIPTCデータを処理できるプログラムでそのデータを表示します。 。

この問題を解決するために、ExifToolというプログラムを使用しました。これはすばらしいソフトウェアであり、画像上のほとんどすべてのデータを管理できます。

すべてのIPTCエンコーディングをUTF-8に変換するために使用したよりも、それ以降は、文字が破損している画像にタグを付け直す必要がありました(Adobe Bridgeは正しく表示されますが、明らかに正しいエンコーディングで保存されません)。

フォルダ内のすべての画像でこれを実行するコマンドは次のとおりです。

exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8

cmdからの作業に慣れていない場合は、ExifToolGUIをダウンロードすることもできます。

この同じタスクをより速く達成できるより良いプログラムは見つかりませんでした。

于 2013-02-15T15:56:16.263 に答える
1

charset を utf8 に設定するには、次のコードを使用します。

$iptc = array(
  '1#090' => "\x1B%G" //utf8
);

コードのその部分を次のように変更します。

// Convert the IPTC tags into binary code
$data = '';

foreach($iptc as $tag => $string) 
{
  $rec = substr($tag, 0,1);
  $tag = substr($tag, 2);
  $data .= iptc_make_tag($rec, $tag, $string);
}

// Embed the IPTC data
$content = iptcembed($data, $path);
于 2015-04-13T10:06:28.087 に答える