如何使用 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"];
}