无法将 Base64 编码的图像添加到 vCard

2024-01-19

我已成功使用 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 数据?


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

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

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

现在照片可以正确导入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将 Base64 编码的图像添加到 vCard 的相关文章

随机推荐

  • Jasmine 在单独的测试项目中

    将 jasmine 测试分离到单独的 Visual Studio 项目中是否实用 可能 我刚刚开始使用角度 并尝试在开始实际的角度实现之前编写我的测试 我将写我的项目视觉工作室2012与厚颜无耻的测试运行者 看这个video http ww
  • iPhone sqlite 应用程序可以附加到其他数据库吗?

    ATTACH DATABASE 命令对于在 sqlite 数据库文件之间传输行非常有用 并允许您跨数据库连接表中的行 例如 sqlite3 BookLoansDB sqlite sqlite gt ATTACH DATABASE Users
  • Android - 使用图像资源背景动态构建 UI 时出现内存泄漏

    我有一个活动 我发誓正在泄漏内存 我正在开发的应用程序需要处理大量图像 因此在直接使用位图时 我必须非常吝惜内存 我添加了一个 Activity 现在如果您使用这个新 Activity 它基本上会让我处于内存使用的边缘 最终抛出 位图超出
  • Ubuntu 中的 .m2 、settings.xml [重复]

    这个问题在这里已经有答案了 在 Windows 环境中 您将在 C Users user name 位置中有 m2 文件夹 您将把 settings xml 文件复制到其中 以便设置代理设置和 Nexus 存储库位置等 那么我必须在 Ubu
  • 多个 CALayers 动画 - 填充模式

    我将屏幕分成小块 然后为每个块设置动画以执行转换 for int x 0 x
  • javascript能区分左移键和右移键吗?

    大多数情况下 这是一个健全性检查 两个 Shift 键的键码都是 16 这是否意味着浏览器中实际上无法区分左移和右移事件 在较新的浏览器中支持DOM3您可以使用event location检查位置 In DOM3 规范 http www w
  • 安装和导入 SendKeys 时出现问题 -- 更新

    我正在尝试安装适用于 Python 的 SendKeys If I use pip install SendKeys 我收到链接错误 sendkeys c 150 warning C4013 Py InitModule undefined
  • 如何在 TypeScript 中使用回调正确处理 let-variables?

    在使用 TypeScript 期间 我对一种常见的 JavaScript 模式有点挣扎 是关于 声明一些 let 变量而不为其设置任何初始值 在某个回调中将此值设置为变量 执行回调后使用此变量 这是代码示例 const wait cb Fu
  • 最小值应匹配过滤查询

    是否可以有这样的查询 query filtered filter terms names Anna Mark Joe execution and 随着 minimum should match 2 陈述 我知道我可以使用一个简单的查询 我已
  • t-sql 求和时间戳之间的差异

    我正在跟踪机器状态 可以是 0 1 和 2 并将该数据与 time stamp 一起存储在 SQL 表中 我在 sql server 中有一个表 其中包含下一个字段 id 整数 时间戳 日期时间 机器状态 int 机器状态与机器状态相关 m
  • ST_MAKELINE 丢弃重复点,即使不连续

    考虑这个简化的例子 SELECT ST MAKELINE ST GEOGPOINT 5 51 ST GEOGPOINT 5 52 ST GEOGPOINT 5 51 我希望这能构建一条包含三个点的线 并在自身上加倍 相反 我得到的是 LIN
  • Django - Ajax 注册

    我正在尝试允许注册 使用此django registration register http docs b list org django registration 0 8 views html registration views reg
  • 应用程序服务器是否为同一用户的每个请求创建新线程?

    这是一个简单的场景 用户从 Web 应用程序的网页触发某些操作 这项手术是一项繁重的手术 需要更多的时间 在服务器端完成操作之前 用户触发使用一些不同参数的相同操作 因此第二个请求的第二个操作也将开始处理 那么在这种情况下 是否有两个不同的
  • 如何避免 jq 截断长小数

    如何防止 jq 截断长十进制值 例如 echo 18302628978110292481 jq 结果 18302628978110292000 Javascript 不支持这么大的数字 所以也不支持jq 整数大小是2 53 Check th
  • 我们如何在 Angularjs 指令之外使用 $compile

    我想用 compile在函数内的控制器中而不是在指令中 是否可以 我正在尝试下面的代码 compile div Cancel div scope 但这会抛出范围未定义的错误 我试图通过 scope在函数内部 但它不起作用 Angular 如
  • 为什么 Docker 中的 pg_restore 出现段错误?

    我正在 docker 容器内测试 postgres 数据库的备份 恢复过程 我像这样转储我的数据库 docker exec ti my postgres container pg dump Fc U postgres gt db dump
  • d3.js:限制画笔大小

    有没有办法限制画笔的大小 即使范围更大 我制作了一个只有 x 刻度的画笔 可以移动和调整大小 我希望能够限制用户调整大小的范围 基本上仅限于某个点 在以下示例中 当画笔大于最大范围的一半时 画笔函数停止更新 不过 刷子本身仍然可以延长 有没
  • 文本区域的 ngModel 无法在 Angular 2 中工作

    我正在尝试使用在文本区域中打印 json 对象ngModel 我做了以下工作
  • 无法在动态链接库 sfml-graphics-2.dll 中定位过程入口点 _ZSt24__ throw_out_of_range_fmtPKcz

    今天我决定下载 安装并尝试使用 SFML 2 2 我还使用 MinGW 编译器下载了 Code Blocks 我设置了所有内容并正确安装了所有内容 或者我是这么认为的 并尝试运行示例代码以查看它是否有效 include
  • 无法将 Base64 编码的图像添加到 vCard

    我已成功使用 Perl 通过 Embperl 为员工创建动态生成的 vCard 填充除照片之外的所有字段 无论如何我都无法让它发挥作用 生成无照片 vCard 的代码工作正常 根据我在网上找到的信息 图片must在 vCard 本身中进行