【问题标题】:Cropping an image before sending to the server on iOS在发送到 iOS 上的服务器之前裁剪图像
【发布时间】:2015-07-28 16:05:01
【问题描述】:

我正在尝试在发送到服务器之前裁剪图像,但我遇到了问题。

我正在尝试这样做:

imageUploadReq.photo = [self encodeToBase64String:[UIImage imageWithData:UIImageJPEGRepresentation(fileData, 0.07f)]];

但 Xcode 抱怨“将 NSData * 传递给参数类型 UIImage 的指针类型不兼容”。我尝试投射它,但它也不起作用。

代码如下:

- (void)uploadPhoto {

   NSData *fileData;

   if (self.image != nil) {
       UIImage *newImage = [self resizeImage:self.image toWidth:320.0f andHeight:480.0f];
       fileData = UIImageJPEGRepresentation(newImage, 0.07f);
   }

    WUTModelImageUploadReq *imageUploadReq = [[WUTModelImageUploadReq alloc]init];

    // I'm trying to set the first parameter of UIImageJPEGRepresentation to fileData 
    imageUploadReq.photo = [self encodeToBase64String:[UIImage imageWithData:UIImageJPEGRepresentation(self.viewControllerPost.imageForPost, 0.07f)]];
    imageUploadReq.extension = @"jpg";


    void (^wsSuccessHandler)(AFHTTPRequestOperation *operation, NSDictionary* responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject){
    NSLog(@"Pull Feed responseObject %@",responseObject);

    NSError *error;
    WUTModelPostImageResponse *wsResponse = [[WUTModelPostImageResponse alloc]initWithDictionary:(NSDictionary *)responseObject error:&error];

    if (error) {
        errorMessage = @"Failure to upload image.";
        [self postExecuteFail];
    }else{
        if (wsResponse.success) {
            WUTModelImage *imageTemp = [wsResponse.data firstObject];
            [postItem setObject:imageTemp.photo forKey:@"photo"];
            [self uploadPostFeed];

        }else{
            errorMessage = @"Failure to upload image.";
            [self postExecuteFail];
        }
     }
  };

    void (^wsErrorHandler)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error){
    if ([error.localizedDescription rangeOfString:@"401"].location != NSNotFound)
        errorMessage = @"It seems that your login session get expire, Please relogin after logged out.";
    else
        errorMessage = @"Failure to upload image.";
    [self postExecuteFail];
  };

  AFHTTPRequestOperation *op = [WUTCommonWebServices WebServicePostCallWithAccessTokenForEndPoint:WS_UploadImage WithJson:imageUploadReq ForSuccess:wsSuccessHandler ForFailure:wsErrorHandler];
  [op start];

}

【问题讨论】:

  • 什么是WUTModelImageUploadReq,尤其是它的属性photoencodeToBase64String: 是什么?
  • 你在哪里裁剪图像?
  • 我在这里裁剪UIImage *newImage = [self resizeImage:self.image toWidth:320.0f andHeight:480.0f];
  • @Larme Photo 是保存图像的属性。
  • 目前还不清楚。照片是 UIImage 吗?一个NSString? encodeToBase64String:的定义是什么?

标签: ios objective-c uiimage uiimagejpegrepresentation


【解决方案1】:

我想,你需要这个:

+(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize{
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return newImage;    }

您只需要传递原始图像和您想要的尺寸,它就会返回您期望的图像。

调用方法如下:

UIImage *originalImage = [info valueForKey:UIImagePickerControllerOriginalImage]; // here originalImage is image taken from camera or you can use whatever you want

UIImage * image = [GlobalFunction imageWithImage:originalImage scaledToSize:CGSizeMake(200, 200)]; // GlobalFunction is class where I have defined this method and it returns UIImage of size (200, 200)

【讨论】:

  • 谢谢。这是一个类别还是一个辅助方法?
  • 它是一个辅助方法。只需传递您的原始图像和预期尺寸,它就会返回您预期尺寸的裁剪图像。如果这是您需要的,请接受答案。
  • 如何使用此辅助方法传递图像?像这样? gist.github.com/lumierephoto/04664b705b80b63d8cb4
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多