将std字符串转换为nsstring
我正在使用opencv开发一个ios应用程序。目前,在我从相机获取图像后,我想将此图像发送到后端服务器。所以我将Mat格式的图像转换为NSString。将std字符串转换为nsstring
正如你可以看到下面:
//Convert image from mat format to vector unchar
cv::vector<uchar> buff;//buffer for coding
cv::vector<int> param = cv::vector<int>(2);
param[0]=CV_IMWRITE_JPEG_QUALITY;
param[1]=95;//default(95) 0-100
cv::imencode(".jpg",image,buff,param);
//Convert from vector unchar to string
std::string imageString(buff.begin(), buff.end());
NSLog(@"%lu",imageString.size());
//Convert from string to NSString
imageData = [NSString stringWithCString:imageString.c_str() encoding:[NSString defaultCStringEncoding]];
NSLog(@"%@",imageData);
NSLog(@"%lu",(unsigned long)imageData.length);
首先,我转换图像从垫到unchar载体。然后将此矢量转换为名为imageString的std字符串。最后,将这个std字符串转换为NSString imageData。
然而,和imagestring的大小是80804,我认为应该是正确的。但imageData的大小是4.我不知道这里会发生什么。
- 2014年8月27日15:09:04.094人脸检测[14540:60B] 80804
- 2014年8月27日15:09:04.095人脸检测[14540:60B]ÿ‡
- 2014-08 -27 15:09:04.097人脸检测[14540:60B] 4
- 2014年8月27日15:09:05.438人脸检测[14540:60B]
下面是代码:
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageData, @"imageData", latitude, @"latitude", longitude, @"longitude", nil];
从服务器210
和响应:
2014年8月27日15:09:05.438人脸检测[14540:60B]使用NSSting因为它ËÿËâ¡53.28588327-6.21796840
此致
避免将丢弃不可打印的字符。使用NSData将图像信息发送到您的服务器。
我尝试使用NSData的。它的工作原理,但问题是我想将它们发送到服务器,我想将其转换为JSON。如你所见:NSDictionary * jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageData,@“imageData”,latitude,@“latitude”,longitude,@“longitude”,nil]; NSData * requestData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:kNilOptions error:nil];我不知道如果我能的NSData转换成JSON像NSDictionary中有一个关键 – Xiang 2014-08-28 12:41:23
正如你可以为Base64发送图像数据的意见,一个被提及,因为这将其转换为可打印字符串,但它不是最好的解决办法。只是不要使用JSON来处理二进制数据 - 它不适用于它。我建议在多部分请求中发送图像数据。 – 2014-08-31 08:28:44
看起来像编码问题 – Iducool 2014-08-27 14:20:15
是的,但我不知道为什么尺寸从std字符串转换为nsstring后急剧下降 – Xiang 2014-08-27 14:23:15
如果您想将它发送到服务器,那么Base64是最可取的。 – Iducool 2014-08-28 05:33:21