在 iOS Objective-C 中使用 SOAP 在 base64 中发送图像

Sending image in base64 with SOAP in iOS Objective-C

我是 iOS 开发的新手。我正在尝试通过使用 SOAP 将点击的图像编码为 base64 格式来发送它。我不知道该怎么做。

这是我的 imagePickerController 委托:

  // delegate method for picking images
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  {
     NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType];

    if([mediaType isEqualToString:(NSString*)kUTTypeImage])
   {
    UIImage *photoTaken = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    //Save Photo to library only if it wasnt already saved i.e. its just been taken
     if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) 
      {
        UIImageWriteToSavedPhotosAlbum(photoTaken, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

     NSData *data=[[NSData alloc] initWithData:UIImagePNGRepresentation(photoTaken)];
        base64= [[NSString alloc]init];
        base64 =[data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];    
      }
    }

//   [picker dismissModalViewControllerAnimated:YES];

    [picker dismissViewControllerAnimated:YES completion:NULL];
    [picker release];
}

图片会很大。它会降低您的应用程序性能,因此首先通过调整图像大小来减小图像大小。

-(UIImage *) imageWithImage:(UIImage *) image scaledTOSize:(CGSize) newsize
{
    UIGraphicsBeginImageContext(newsize);
    [image drawInRect:CGRectMake(0, 0, newsize.width, newsize.height)];
    UIImage *newImg=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImg;
}

现在将这个小 UIImage 转换为 NSData

 NSData *imgData=[[NSData alloc] initWithData:UIImagePNGRepresentation(image)];

然后使用第三方库将NSData转成base64字符串-

base64.h

NSData+Base64.h

NSstring *imgString = [imgData base64EncodedString];
imgString = [imgString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

现在将此字符串发送到您的服务。

代码:

UIGraphicsBeginImageContext(self.drawImage.frame.size);
[self.drawImage.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData* data = UIImageJPEGRepresentation(imageView, 1.0f);
[Base64 initialize];
NSString *strEncoded = [Base64 encode:data];

注意:drawImage 是 UIImageView 和 Import 的对象 Base64.h class。

在 didFinishPickingMediaWithInfo..

 UIImage* chosenImage =info[UIImagePickerControllerEditedImage];

//encoding image to base64

    imgData=[[NSData alloc] initWithData:UIImagePNGRepresentation(chosenImage)];
_base64=[[NSString alloc]init];

    _base64=[imgData  base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
self.tempbase= _base64;

并在 soap 消息中调用 tempbase