nie można dodać obrazu zakodowanego w formacie base64 do vCard

Z powodzeniem użyłem Perla (poprzez Embperl) do stworzenia dynamicznie generowanej wizytówki vCard dla pracowników, wypełniając wszystkie pola oprócz zdjęcia. Bez względu na wszystko nie mogę tego osiągnąć. (Kod generujący vCard bez fotografii działa prawidłowo).

Zgodnie z informacjami, które mogę znaleźć w Internecie, obrazmusi być zakodowane w base64 w samej vCard. Specyfikacja vCard (używam 3.0) obsługuje obrazy połączone z URL-em, ale mój iPhone nie będzie do nich linkował w ten sposób. Więc to jest base64 lub nic.

Teraz wiem, że kodowanie base64 działa, ponieważ jeśli użyjesz kodu po prostu pokaż obraz ...

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

... wtedy zdjęcie wyświetla się idealnie w mojej przeglądarce. (Ktoś zasugerował, że potrzebujębinmode $file; tam, ale usunięcie go wydaje się nie mieć znaczenia w wynikach.)

Ale jeśli zamiast tego umieszczę je w vCard, zdjęcie po prostu nie pojawi się wraz z pozostałymi danymi kontaktowymi:

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

Czy w jakiś sposób nieprawidłowo formatuję dane vCard?

questionAnswers(1)

yourAnswerToTheQuestion