如何将旋转图像保存在 iPhone 相册中?

Posted

技术标签:

【中文标题】如何将旋转图像保存在 iPhone 相册中?【英文标题】:How to save the rotate image in iphone album? 【发布时间】:2013-02-07 11:08:56 【问题描述】:

当我点击视图并且图像旋转成功但旋转后的图像没有保存在 iPhone 相册中时,我可以旋转图像。

当我点击保存按钮时,上一张图片正在保存在相册中,请任何人帮助我

- (void) touchesBegan:(NSSet *)_touches withEvent:(UIEvent *)_event
  
   UITouch* touch = [_touches anyObject];
   CGPoint location = [touch locationInView:m_block];
   m_locationBegan = location;
   

  - (void) touchesMoved:(NSSet *)_touches withEvent:(UIEvent *)_event
   
    UITouch* touch = [_touches anyObject];
    CGPoint location = [touch locationInView:m_block];
    [self updateRotation:location];  
   

- (void) touchesEnded:(NSSet *)_touches withEvent:(UIEvent *)_event
    
   UITouch *touch=[_touches anyObject];
   CGPoint location = [touch locationInView:m_block];
   m_currentAngle = [self updateRotation:location];    
 
 - (float) updateRotation:(CGPoint)_location
   
     float fromAngle = atan2(m_locationBegan.y-m_block.center.y, m_locationBegan.x-m_block.center.x);
    float toAngle = atan2(_location.y-m_block.center.y, _location.x-m_block.center.x);
     float newAngle = wrapd(m_currentAngle + (toAngle - fromAngle), 0, 2*3.14);

     CGAffineTransform cgaRotate = CGAffineTransformMakeRotation(newAngle);
     m_block.transform = cgaRotate;
     int oneInFifty = (newAngle*50)/(2*3.14);
     m_label.text = [NSString stringWithFormat:@"Angle: %f 1in50: %i", newAngle, oneInFifty];
      return newAngle;
    
  - (IBAction)saveImageToAlbum
     
   [self.library saveImage:m_block.image toAlbum:@"My" withCompletionBlock:^(NSError *error) 
      if (error!=nil) 
        NSLog(@"Big error: %@", [error description]);
    
  ];

UIImage *image = m_block.image;
NSUserDefaults * user= [NSUserDefaults standardUserDefaults] ;
[user setObject:UIImagePNGRepresentation(image) forKey:@"foo"];
[user synchronize];
[self dismissViewControllerAnimated:YES completion:nil];

   

【问题讨论】:

【参考方案1】:

我认为您正在使用自定义 UIView 或 UIImageView。

您可以通过以下代码保存任何视图的当前外观:

+ (UIImage *) imageWithView:(UIView *)view

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;

我从:How to capture UIView to UIImage without loss of quality on retina display得到这个

这对我来说效果很好。

一切顺利...

【讨论】:

我得到了您在我的代码中看到的角度,那么如何在该图像中传递该角度? 我已经尝试过这段代码,但它不起作用你可以在我的代码中看到我正在重新调整角度。那个角度我必须保存然后怎么做请解决我的问题.. 不工作,但你在图像中得到了什么?空白图片 上一张图片?或任何错误 架构 i386 的未定义符号:“_OBJC_IVAR_$_UIViewController._view”,引用自:ViewController.o ld 中的 -[ViewController captureView]:未找到架构 i386 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 这不是代码错误,这是构建错误。你可以看到“链接器命令失败”

以上是关于如何将旋转图像保存在 iPhone 相册中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iPhone 中的目录中检索图像?

如何将图像从相机保存到 iPhone 画廊中的特定文件夹?

自定义相册中的图像保存问题以及 iphone 中的默认相机胶卷

如何水平翻转图像以将翻转的图像保存在相册中?

将自定义图像(非 JPEG)保存到 iPhone 照片目录

将图像添加到 iPhone 模拟器相册 - 接受的“技巧”不起作用