在上载到iOS上的服务器之前调整图像大小

保罗

我正在尝试在照片应用程序中调整图像的大小,但尚未成功。我是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];
        }
     }
  };
弗拉德·帕普科(Vlad Papko)

更新
看起来像你忘了局部变量设置scaleImagescaleImage财产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呼叫,因此如果所选图像为nil,您的应用程序将崩溃,并显示所提供的消息。
如果NSAssert被触发,则需要查找问题的根本原因。基本上,您需要_imageForPostviewDidLoad调用方法之前验证变量是否已初始化

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在上载到android上的ftp服务器时,FTPClient损坏图像吗?

Golang S3没有找到文件并且服务器在上载图像时出现了恐慌

在上传到远程服务器之前检查图像分辨率

上传到服务器之前,如何在iOS上压缩/调整图像大小?

在上传到服务器之前如何压缩图像

如何在上载到服务器之前调整$ cordovaCapture.captureImage图像的大小?

在上传到服务器或从服务器提供给客户端时,调整图像大小?

jQuery Accordion中的Google Maps可在jsFiddle中使用,但是在手动调整窗口大小之前,地图不会加载到我的服务器上

上载到跳过Web服务器

在上载到Firebase之前先调整图像的大小

在上载到数据库之前如何拖动和重新定位图像?

上载到服务器之前优化图像的最佳方法

将从画布获得的图像上载到服务器

Android CustomWebChromeClient openFileChooser在上传之前调整图像大小

上载到服务器后的图像文件为空

在上传C#Xamarin之前调整图像大小

在上传之前,PHP GD调整大小/裁剪图像

上载到服务器之前裁剪图像

Filezilla上载到服务器错误

是否将Cakephp 3.0的tmp和tests文件夹上载到服务器上?

在网络服务器上存储多个大小的图像或调整当前图像的大小

将图像文件从IOS上载到Web服务器

将调整大小的表单图像上传到服务器

将Adobe Creative编辑的图像而不是其Creative Cloud上载到我的服务器

以编程方式显示调整大小的图像,而无需在服务器上创建其他图像

iOS上的Safari无法Ajax上载某些图像文件:“无法连接到服务器”(但网站正常)

Android Studio:如何在上载到服务器之前调整图像大小?

将多个图像字段上载到服务器mysql中的每一行

Javascript在上传到服务器之前调整图像大小以减小其大小?