2

从图像中读取 IPTC 数据时,通过 PHP 读取时,UTF-8 重音字符无法正确显示。

例如:é、ø 和 ü

将标题内容类型设置为 UTF8,而不是字符,我得到一个黑色菱形的问号。� 如果没有设置内容类型,那么我会得到一个破折号:—</p>

以下是用于读取 IPTC 块的代码:

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

我还尝试将完全相同的图像上传到同一服务器上的 WordPress 安装,它会正确去除重音字符并将其替换为基本的拉丁语等价物。我不介意这是否是最终结果,我只想正确阅读字符。

关于如何从图像中获取完整和正确数据的任何想法?

4

2 回答 2

4

回答有点晚,但由于我在显示特殊字符时遇到了同样的问题č š ž(出现在斯洛文尼亚字母表中),我也可以回答以供将来参考。

这个问题的解决方法其实和php无关,而是和IPTC数据编码有关。默认情况下,大多数可以写入 IPTC 数据的软件都会以纯 ASCII 格式存储它。起初我使用了 Adob​​e Bridge——当你开始标记图像时它实际上会显示所有特殊字符——但是一旦你想在 PHP 中解析这些数据,你实际上不会看到特殊字符。(我必须再次检查这部分,但主要的问题是发生了两种不同的编码——一种在图像上编码 IPTC 数据,另一种在可以处理 IPTC 数据的程序中显示该数据——或类似的东西) .

为了解决这个问题,我使用了一个名为ExifTool的程序,这是一款了不起的软件,可以让您管理图像上的几乎所有数据。

比我用它来将所有 IPTC 编码转换为 UTF-8 - 从那时起我只需要重新标记具有损坏字符的图像(Adobe Bridge 正确显示但显然没有以正确的编码保存)。

在文件夹中的所有图像上完成此操作的命令是:

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

如果您不熟悉使用 cmd 工作,您可能还想下载ExifTool GUI 。

我还没有找到任何更好的程序可以更快地完成同样的任务。

于 2013-02-15T15:56:16.263 回答
1

要将字符集设置为 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 回答