não é possível adicionar uma imagem codificada em base64 ao vCard
Usei com êxito o Perl (via Embperl) para criar um vCard gerado dinamicamente para funcionários, preenchendo todos os campos, exceto a foto. Eu não consigo fazer isso funcionar, não importa o quê. (O código para gerar um vCard sem foto funciona bem.)
De acordo com a informação que posso encontrar online, a imagemdevo seja codificado em base64 no próprio vCard. A especificação vCard (estou usando o 3.0) suporta imagens vinculadas a URL, mas meu iPhone não irá vinculá-las dessa maneira. Então é base64 ou nada.
Agora, eu sei que a codificação base64 funciona, porque se usar o código para mostrar apenas uma imagem ...
[-
$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 +]">
... então a foto aparece perfeitamente no meu navegador. (Alguém sugeriu que eu precisavabinmode $file;
lá, mas removê-lo parece não fazer diferença na saída.)
Mas se eu incluí-lo no vCard, a foto simplesmente não aparece com o resto dos dados de contato:
$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";
Estou mal formatando os dados do vCard de alguma forma?