我已成功使用 Perl(通过 Embperl)为员工创建动态生成的 vCard,填充除照片之外的所有字段。无论如何我都无法让它发挥作用。 (生成无照片 vCard 的代码工作正常。)
根据我在网上找到的信息,图片must在 vCard 本身中进行 Base64 编码。 vCard 规范(我使用的是 3.0)支持 URL 链接图像,但我的 iPhone 不会以这种方式链接到它们。所以要么是base64,要么什么都不是。
现在,我知道 base64 编码是有效的,因为如果使用代码只显示图像......
[-
$photo = "/path/to/directory/".$employeeID.".jpg";
open($file, "<", $photo) || warn "Can't open $photo: $!\n";
#binmode $file;
$jpg = join('', <$file>);
$decoded = MIME::Base64::encode_base64($jpg);
$vcard_content = $decoded;
-]
<img src="data:image/jpeg;base64,[+ $decoded +]">
...然后照片完美地显示在我的浏览器中。 (有人建议我需要binmode $file;
在那里,但删除它似乎对输出没有影响。)
但如果我将其包含在 vCard 中,照片就不会与其余联系数据一起显示:
$vcard_content = "BEGIN:VCARD\r";
$vcard_content .= "VERSION:3.0\r";
$vcard_content .= "N:".$v_last.";".$v_first.";".$v_middle.";;\r";
# etc.
$vcard_content .= "PHOTO;ENCODING=b;TYPE=JPEG:".$decoded."\r";
# etc.
$vcard_content .= "END:VCARD";
我是否以某种方式错误地格式化了 vCard 数据?