如何使用 objective C 将使用 captureOutput didFinishProcessingPhoto 拍摄的图像转换为要存储在 JSON 中的字符串
How to convert an image taken with captureOutput didFinishProcessingPhoto into a string to be stored in a JSON using objective C
我正在拍照并使用 captureOutput:didFinishProcessingPhoto
进行处理。
我需要将照片 (AVCapturePhoto) 转换成一个字符串,这样我就可以在 JSON 中将它发送到服务器。我需要先将它存储在 userDefaults 中,然后在最后一个屏幕上我需要检索它并将其添加到 JSON/Dictionary.
我正在做一个我没有开始的项目。我通常会把它设置得完全不同。无论哪种方式,这都是我现在的问题。
我正在尝试这个:
- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
if (error != nil){
NSLog(@"%s: %@", "Error in capture process", error.debugDescription);
}
NSData *imageData = [photo fileDataRepresentation];
if (imageData == nil){
NSLog(@"%s", "unable to create image data");
}
NSData *photoData = UIImageJPEGRepresentation([[UIImage alloc] initWithData:imageData], 0.0);
NSString *str = [[NSString alloc] initWithData:photoData encoding:NSUTF16StringEncoding];
// UIImage *image = [[UIImage alloc] initWithData:imageData];
// NSData *imageDataObject = UIImageJPEGRepresentation(image, 0.0);
// NSString *photoString = [[NSString alloc] initWithData:imageDataObject encoding:NSUTF8StringEncoding];
// UIImage *image = [[UIImage alloc] initWithData:imageData];
// NSData *imageDataObject = UIImageJPEGRepresentation(image, 0.0);
// NSString *photoString = [[NSString alloc] initWithData:imageDataObject encoding:NSUTF8StringEncoding];
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:str forKey:@"photo"];
}
注释掉的代码只是失败的尝试。
在 swift 中,我通过将可编码对象创建为单例(从未将其存储在默认值中)并在发送数据之前调用此函数来实现:
form.photo = UIImage(data: imageData)?.jpegData(compressionQuality: 0.0)
我 objective c 就没这么幸运了。我没有 jpegData 函数....
每次我尝试转换数据时,转换都会失败,并且返回 null。为什么?
感谢@Larme 为我指明了正确的方向。这是我想出的:
- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
if (error != nil){
NSLog(@"%s: %@", "Error in capture process", error.debugDescription);
}
NSData *imageData = [photo fileDataRepresentation];
if (imageData == nil){
NSLog(@"%s", "unable to create image data");
}
UIImage *image = [[UIImage alloc] initWithData:imageData];
NSData *jpegImage = UIImageJPEGRepresentation(image, 0.0);
NSString *base64Str = [jpegImage base64EncodedStringWithOptions:0];
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:base64Str forKey:@"photo"];
}
我正在拍照并使用 captureOutput:didFinishProcessingPhoto
进行处理。
我需要将照片 (AVCapturePhoto) 转换成一个字符串,这样我就可以在 JSON 中将它发送到服务器。我需要先将它存储在 userDefaults 中,然后在最后一个屏幕上我需要检索它并将其添加到 JSON/Dictionary.
我正在做一个我没有开始的项目。我通常会把它设置得完全不同。无论哪种方式,这都是我现在的问题。
我正在尝试这个:
- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
if (error != nil){
NSLog(@"%s: %@", "Error in capture process", error.debugDescription);
}
NSData *imageData = [photo fileDataRepresentation];
if (imageData == nil){
NSLog(@"%s", "unable to create image data");
}
NSData *photoData = UIImageJPEGRepresentation([[UIImage alloc] initWithData:imageData], 0.0);
NSString *str = [[NSString alloc] initWithData:photoData encoding:NSUTF16StringEncoding];
// UIImage *image = [[UIImage alloc] initWithData:imageData];
// NSData *imageDataObject = UIImageJPEGRepresentation(image, 0.0);
// NSString *photoString = [[NSString alloc] initWithData:imageDataObject encoding:NSUTF8StringEncoding];
// UIImage *image = [[UIImage alloc] initWithData:imageData];
// NSData *imageDataObject = UIImageJPEGRepresentation(image, 0.0);
// NSString *photoString = [[NSString alloc] initWithData:imageDataObject encoding:NSUTF8StringEncoding];
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:str forKey:@"photo"];
}
注释掉的代码只是失败的尝试。
在 swift 中,我通过将可编码对象创建为单例(从未将其存储在默认值中)并在发送数据之前调用此函数来实现:
form.photo = UIImage(data: imageData)?.jpegData(compressionQuality: 0.0)
我 objective c 就没这么幸运了。我没有 jpegData 函数....
每次我尝试转换数据时,转换都会失败,并且返回 null。为什么?
感谢@Larme 为我指明了正确的方向。这是我想出的:
- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error {
if (error != nil){
NSLog(@"%s: %@", "Error in capture process", error.debugDescription);
}
NSData *imageData = [photo fileDataRepresentation];
if (imageData == nil){
NSLog(@"%s", "unable to create image data");
}
UIImage *image = [[UIImage alloc] initWithData:imageData];
NSData *jpegImage = UIImageJPEGRepresentation(image, 0.0);
NSString *base64Str = [jpegImage base64EncodedStringWithOptions:0];
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:base64Str forKey:@"photo"];
}