kann der vCard kein base64-codiertes Image hinzufügen

Ich habe Perl (über Embperl) erfolgreich verwendet, um eine dynamisch generierte vCard für Mitarbeiter zu erstellen, die alle Felder mit Ausnahme des Fotos ausfüllt. Ich kann das nicht zum Laufen bringen, egal was passiert. (Der Code zum Generieren einer fotolosen vCard funktioniert einwandfrei.)

Nach den Informationen kann ich das Bild online findenMuss in der vCard selbst base64-codiert sein. Die vCard-Spezifikation (ich verwende 3.0) unterstützt URL-verknüpfte Bilder, aber mein iPhone kann auf diese Weise keine Verknüpfungen herstellen. Es ist also base64 oder nichts.

Jetzt weiß ich, dass die Base64-Codierung funktioniert, denn wenn Sie den Code verwenden, um nur ein Bild anzuzeigen ...

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

... dann wird das Foto in meinem Browser perfekt angezeigt. (Jemand schlug vor, ich brauchebinmode $file; in dort, aber das Entfernen scheint keinen Unterschied in der Ausgabe zu machen.)

Wenn ich es stattdessen in die vCard einbinde, wird das Foto einfach nicht mit den restlichen Kontaktdaten angezeigt:

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

Formatiere ich die vCard-Daten irgendwie falsch?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage