gpt4 book ai didi

ios - 无法将 base64 编码的图像添加到 vCard

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:23 24 4
gpt4 key购买 nike

我已成功使用 Perl(通过 Embperl)为员工创建动态生成的 vCard,填充除照片以外的所有字段。无论如何我都无法正常工作。 (生成无照片 vCard 的代码工作正常。)

根据我在网上找到的信息,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 数据?

最佳答案

将 vCard 导入 OS X Contacts 并再次导出后,然后使用文本编辑器查看导出的 vCard,我注意到 base64 编码图像的第一部分在那里,但其余部分不存在。编码在编码字符串中出现空白字符(显然是 \r)的地方停止。

所以我在构建 vCard 之前从 base64 编码中删除了所有空白字符:

$decoded = MIME::Base64::encode_base64($jpg);
$decoded =~ s/\s//g;

现在照片可以正确导入了。

关于ios - 无法将 base64 编码的图像添加到 vCard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com