2015-07-28 7 views
-1

Я пытаюсь обрезать изображение перед отправкой на сервер, и у меня возникают проблемы.Обрезка изображения перед отправкой на сервер на iOS

Я пытался сделать это:

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]; 

} 
+1

Что 'WUTModelImageUploadReq', особенно это свойство' photo'? Что такое 'encodeToBase64String:'? – Larme

+0

где вы обрезаете изображение здесь? –

+0

Я обрезаю его здесь 'UIImage * newImage = [self resizeImage: self.image toWidth: 320.0f andHeight: 480.0f];' – Paul

ответ

0

Я думаю, вам это нужно:

+(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) 
+0

Это класс или вспомогательный метод? – Paul

+0

Его вспомогательный метод. Просто передайте исходное изображение и ожидаемый размер, и он вернет обрезанное изображение с вашим ожидаемым размером. Если это то, что вы необходимо, а затем принять ответ. – Bhanupriya

+0

Как передать изображение с помощью этого вспомогательного метода? Как это? https://gist.github.com/lumierephoto/04664b705b80b63d8cb4 – Paul

Смежные вопросы