使用 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。
我正在使用 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。