使用 XMPPFramework 上传 vCard 时图像变得难以辨认

Image is becoming illegible on vCard upload using XMPPFramework

我正在使用 XMPPFramework 创建我的聊天应用程序。我想更新当前用户的头像。为此,我使用了 ImagePicker。这是我的 updateAvatar 方法的样子 -

- (void)updateAvatar:(UIImage *)avatar
{
    NSData *imageData = UIImageJPEGRepresentation(avatar, 0.5f);
    imageData = [imageData base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    dispatch_async(queue, ^{
        XMPPvCardTempModule *vCardTempModule = self.xmppvCardTempModule;
        XMPPvCardTemp *myVcardTemp = [vCardTempModule myvCardTemp];
        if (!myVcardTemp)
        {
            NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
            myVcardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
        }
        //[myVcardTemp setName:[NSString stringWithFormat:@"%@",name.text]];
        [myVcardTemp setPhoto:imageData];

        [vCardTempModule updateMyvCardTemp:myVcardTemp];

    });
}

但是当我取回 vCard 时,图像变成了无效图像。我已经检查了 this question。当我在 vCard 上使用 setPhoto 方法时,它正在手动创建 vCard 元素。我也尝试过使用 UIImagePNGRepresentation,但它也不起作用。

知道这里有什么问题吗?

您是否正在用这一行覆盖您的 imageData 对象?

imageData = [imageData base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];

使用另一个NSData来包裹base64编码的数据,否则结果不可预知

看来我只需要这样做 -

NSData *imageData1 = UIImageJPEGRepresentation(avatar,0.0);


XMPPvCardTemp *myvCardTemp = [self.xmppvCardTempModule myvCardTemp];

if (myvCardTemp) {
    [myvCardTemp setPhoto:imageData1];
    [self.xmppvCardTempModule updateMyvCardTemp:myvCardTemp];
}

根本不需要转换为 Base64。