我已经成功地使用Perl (通过Embperl)为员工创建了一个动态生成的vCard,填充了除照片之外的所有字段。无论如何我都不能让它起作用。(生成无照片vCard的代码运行良好。)
根据我可以在网上找到的信息,图像必须在vCard本身中被base64 64编码。vCard规范(我使用的是3.0)支持URL链接的图像,但是我的iPhone不会以这种方式链接到它们。所以是base64还是什么都没有。
现在,我知道base64 64编码是有效的,因为如果使用代码只显示图像.
[-
$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中,照片就不会显示在其他联系人数据中:
$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数据?
发布于 2013-10-03 19:38:53
在将vCard导入OS联系人并将其导出,然后使用文本编辑器查看导出的vCard后,我注意到base64 64编码图像的第一部分在那里,但其余部分不在。在编码字符串中出现空白字符(显然是\r)时,编码就停止了。
因此,在构建base64之前,我从vCard编码中删除了所有空格字符:
$decoded = MIME::Base64::encode_base64($jpg);
$decoded =~ s/\s//g;现在照片正确导入了。
https://stackoverflow.com/questions/19167455
复制相似问题