no se puede agregar una imagen codificada en base64 a vCard

He utilizado con éxito Perl (a través de Embperl) para crear una vCard generada dinámicamente para los empleados, llenando todos los campos excepto la foto. No puedo hacer que funcione sin importar qué. (El código para generar una vCard sin foto funciona bien).

Según la información que puedo encontrar online, la imagen.debe Ser codificado en base64 en la propia vCard. La especificación vCard (estoy usando 3.0) admite imágenes vinculadas a URL, pero mi iPhone no las vinculará de esa manera. Así que es base64 o nada.

Ahora, sé que la codificación de base64 funciona, porque si se usa el código para mostrar una imagen ...

[-
$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 +]">

... entonces la foto se muestra perfectamente en mi navegador. (Alguien sugirió que necesitababinmode $file; allí, pero eliminarlo parece no hacer ninguna diferencia en la salida.)

Pero si lo incluyo en la vCard, la foto simplemente no aparece con el resto de los datos de contacto:

$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";

¿Estoy mal formateando los datos de vCard de alguna manera?

Respuestas a la pregunta(1)

Su respuesta a la pregunta