2015-07-30 9 views
2

Я пытаюсь изменить размер изображения в приложении для фотографий и еще не успел. Я новичок на фото изменения размера на прошивке, но я клянусь, что я делаю это правильно, но мои журналы показывают:Изменение размера изображения перед загрузкой на сервер на iOS

Error: <WUTModelImageUploadReq> 
    [photo]: <nil> 
    [extension]: <nil> 
</WUTModelImageUploadReq> 

Я пытаюсь установить «scaleImage» как изображение в AsyncPostFeed.m

Вот мой код:

UIImage + Scaling.m

@implementation UIImage (Scaling) 

- (UIImage *)scaleImageToSize:(CGSize)newSize { 

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 

CGFloat originX = 0.0; 
CGFloat originY = 0.0; 

CGRect destinationRect = 
CGRectMake(originX, originY, newSize.width, newSize.height); 

[self drawInRect:destinationRect]; 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

return newImage; 
} 

@end 

WUTPostViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *selectedImage = _imageForPost; 

    CGSize scaleSize = CGSizeMake(200.0f, 200.0f); 

    UIImage *scaleImage = 
    [selectedImage scaleImageToSize:scaleSize]; 

    [self.imageViewForPost setImage:scaleImage]; 

    ... 
} 

WUTPostViewController.h:

@interface WUTPostViewController : WUTCommonViewController  <UITextViewDelegate,UIAlertViewDelegate> 


@property (strong, nonatomic) IBOutlet UILabel *lblUserName; 
@property (strong, nonatomic) IBOutlet UIImageView *imageViewForPost; 
@property (strong, nonatomic) IBOutlet UITextView *tvDesription; 

@property (strong,nonatomic) UIImage *imageForPost; 
@property (strong,nonatomic) UIImage *scaleImage; 

- (void)wsPostLikeSuccessCallbackForPostId; 
- (void)wsPostLikeFailCallbackWithMessage:(NSString *)errorMessage; 


@end 

AsyncPostFeed.m:

- (void)uploadPhoto { 

    WUTModelImageUploadReq *imageUploadReq = [[WUTModelImageUploadReq alloc]init]; 
    // I'm trying to set scaleImage here 
    imageUploadReq.photo = [self encodeToBase64String:[UIImage imageWithData:UIImageJPEGRepresentation(self.viewControllerPost.scaleImage, 0.07f)]]; 

    imageUploadReq.extension = @"jpg"; 

    NSLog(@"Error: %@", imageUploadReq); 


    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."; 
     NSLog(@"Error: %@", error); 
     [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."; 
      NSLog(@"Error: %@", error); 
      [self postExecuteFail]; 
     } 
    } 
    }; 
+0

Сообщение "scaleImageToSize:' code. – PowHu

+0

Хорошо, я добавил, что категория – Paul

+0

Может быть, ваш код изменения размера не даст изображения. Вы отлаживаете это? –

ответ

1

Update
Похоже, вы забыли установить локальную переменную scaleImage до scaleImage Недвижимость WUTPostViewController класс.
Попробуйте этот код (последняя строка должна сделать трюк):

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *selectedImage = _imageForPost; 

    CGSize scaleSize = CGSizeMake(200.0f, 200.0f); 

    UIImage *scaleImage = 
    [selectedImage scaleImageToSize:scaleSize]; 

    [self.imageViewForPost setImage:scaleImage]; 
    self.scaleImage = scaleImage; 

    ... 
} 

Оригинал ответа
Ваш алгоритм изменения размера правильно. Я использую то же самое в своем проекте, и он отлично работает.
Похоже, вы отправляете scaleImageToSize: сообщение nil объект. Вот почему результатом этого сообщения является nil.
Вы можете проверить это предположение, обновив код таким образом:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *selectedImage = _imageForPost; 
    NSAssert(selectedImage != nil, @"Selected image is nil"); 

    CGSize scaleSize = CGSizeMake(200.0f, 200.0f); 

    UIImage *scaleImage = 
    [selectedImage scaleImageToSize:scaleSize]; 

    [self.imageViewForPost setImage:scaleImage]; 

    ... 
} 

Как вы видите, я добавил NSAssert вызов, поэтому ваше приложение будет врезаться с обеспеченным сообщением, если выбранное изображение является нулевым.
Если запущено NSAssert, вам необходимо найти основную причину проблемы. В основном вам нужно проверить, что переменная _imageForPost инициализируется до того, как вызывается метод viewDidLoad.

+0

Приложение не сработало при добавлении 'NSAssert (selectedImage! = Nil, @" Selected image is no ");' – Paul

+0

@Paul, hmm, okay. Другое предположение, что размер изображения неверен. Можете ли вы добавить такой код 'NSLog (@"% @ ", _imageForPost)' и посмотреть, какой размер изображения будет напечатан в консоли? –

+0

@Paul, еще одна вещь об этом коде: '[self encodeToBase64String: [UIImage imageWithData: UIImageJPEGRepresentation (self.viewControllerPost.scaleImage, 0.07f)]]; 'Вы установили локальную переменную' scaleImage' в свойство 'viewControllerPost'' scaleImage'? Потому что я вижу: в 'viewDidLoad' вы использовали локальную переменную' scaleImage', но в 'AsyncPostFeed.m' вы использовали свойство контроллера просмотра' ​​scaleImage'. –

0

Пожалуйста, проверьте первое изображение не нулевой

CGSize size1=CGSizeMake(300,300); 
UIGraphicsBeginImageContext(size1); 
[selectgalleryimage drawInRect:CGRectMake(0, 0,size1.width, size1.height)]; 
UIImage *SELECTED_IMG1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

Спасибо, что ответили. Как интегрировать этот пример в свой код? – Paul

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