我用 iPhone 创建了一个 .vcf 联系人,并通过电子邮件将文件发送给我自己。在那个.vcf中,我拍了一张照片,它直接保存在vCard中,而不是手机内存中。
在 .vcf 的源代码中,有一段这样开头的代码:
PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAA
它还在继续……现在,我想获取这张照片并将其保存为 .JPEG。任何想法如何做到这一点?
谢谢。
在 macOS 中,很容易从带有“vi”和“base64.
例如,
导出“Apple Inc.” 每个用户帐户附带的联系人。
照片;编码=b;类型=JPEG:
# base64 -D -i Apple\ Inc..vcf -o Apple_Logo.jpeg
编码是Base64。你可以在网上找到一个解码工具。
我可以推荐Freeformatter.com的解码器,它可以让你保存为二进制文件。然后,您需要将该文件重命名为photo.jpg
.
您应该使用 vCard 解析器(如vpim),它提供了从 vCard 中提取照片数据的能力。
另一个 vCard 解析器是ez-vcard,它是用 Java 编写的(免责声明:我是作者)。
File file = new File("vcard.vcf");
VCard vcard = Ezvcard.parse(file).first();
for (PhotoType photo : vcard.getPhotos()){
byte data[] = photo.getData();
//save byte array to file
}
因为这不是https://apple.stackexchange.com/我会建议一个快速的 bash 脚本,我用它来在命令行上从 .vcf 文件中提取图像:
#!/bin/bash
#vcf_photo_extractor ver 20180207094631 Copyright 2018 alexx, MIT Licence
if [ ! -f "$1" ]; then
echo "Usage: $(basename $0) [path/]any/contact.vcf"
exit 1
fi
DATA=$(cat "$1" |tr -d "\r\n"|sed -e 's/.*TYPE=//' -e 's/END:VCARD.*//')
NAME=$(grep -a '^N;' $1|sed -e 's/.*://')
#if [ $(wc -c <<< $DATA) -lt 5 ];then #bashism
if [ $(echo $DATA|wc -c) -lt 5 ];then
echo "No images found in $1"
exit 2
fi
EXT=${DATA%%:*}
if [ "$EXT" == 'BEGIN' ]; then echo "FAILED to extract $EXT"; exit 3; fi
IMG=${DATA#*:}
FILE=${1%.*}
Fn=${FILE##*/}
if [ -f "${FILE}.${EXT}" ]; then
echo "Overwrite ${FILE}.${EXT} ? "
read -r YN
if [ "$YN" != 'y' ]; then exit; fi
fi
echo $IMG | base64 -id > ${FILE}.${EXT} || \
echo "Failed to output $NAME to ${FILE}.${EXT}"
此脚本尝试提取 base64 数据,使用 base64 对其进行解码并创建图像文件。我发现在 linux 上可以正常base64 -id
工作但base64 -d
抛出错误。
如果您是单行代码或代码高尔夫的粉丝,那么这可能会起作用:
cat 1.vcf|tr -d "\n"|sed -e 's/.*TYPE=[^:]*://' -e 's/END:V.*//'|base64 -id >1.jpg
如果您想要更清洁的东西,那么 Matt Brock 的 vCard_photo_extractor.sh可能就是您要找的东西。
将http://www.sobolsoft.com/convertvcfjpg/与 OSX 的 vCard 一起使用,成功。