首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将base64 64编码的映像添加到vCard

无法将base64 64编码的映像添加到vCard
EN

Stack Overflow用户
提问于 2013-10-03 19:18:49
回答 1查看 6.9K关注 0票数 3

我已经成功地使用Perl (通过Embperl)为员工创建了一个动态生成的vCard,填充了除照片之外的所有字段。无论如何我都不能让它起作用。(生成无照片vCard的代码运行良好。)

根据我可以在网上找到的信息,图像必须在vCard本身中被base64 64编码。vCard规范(我使用的是3.0)支持URL链接的图像,但是我的iPhone不会以这种方式链接到它们。所以是base64还是什么都没有。

现在,我知道base64 64编码是有效的,因为如果使用代码只显示图像.

代码语言:javascript
复制
[-
$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 +]">

...then,这张照片在我的浏览器中显示得很完美。(有人建议我需要binmode $file;,但删除它似乎对输出没有任何影响。)

但是,如果我将其包含在vCard中,照片就不会显示在其他联系人数据中:

代码语言:javascript
复制
$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数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 19:38:53

在将vCard导入OS联系人并将其导出,然后使用文本编辑器查看导出的vCard后,我注意到base64 64编码图像的第一部分在那里,但其余部分不在。在编码字符串中出现空白字符(显然是\r)时,编码就停止了。

因此,在构建base64之前,我从vCard编码中删除了所有空格字符:

代码语言:javascript
复制
$decoded = MIME::Base64::encode_base64($jpg);
$decoded =~ s/\s//g;

现在照片正确导入了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19167455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档