iphone - 某些 iPhone 4s 和 iPod Touch 上的随机 img 保存错误

标签 iphone ios xcode uiimage

我遇到了一个奇怪的错误。我会喜欢该应用程序将图像保存到相机胶卷中。

但有少量设备在保存消息时出现错误。

编辑:错误日志

“无法为保存的照片编码图像。” UserInfo=0x3e7170 {NSUnderlyingError=0x389310 "无法为已保存的照片编码图像。", NSLocalizedDescription=无法为已保存的照片编码图像。

May 22 14:13:34 unknown assetsd[281] <Error>: ImageIO: CGImageDestinationAddImage image parameter is nil
May 22 14:13:34 unknown assetsd[281] <Error>: ImageIO: CGImageDestinationFinalize image destination does not have enough images
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextSetBaseCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextSaveGState: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextSetInterpolationQuality: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextFillRects: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextSetBaseCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextSaveGState: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextSetInterpolationQuality: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextFillRects: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextScaleCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextConcatCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextDrawImage: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextConcatCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextTranslateCTM: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextDrawImage: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGContextRestoreGState: invalid context 0x0
May 22 14:13:34 unknown assetsd[281] <Error>: CGBitmapContextCreateImage: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGContextRestoreGState: invalid context 0x0
May 22 14:13:34 unknown com.apple.assetsd[281] <Notice>: May 22 14:13:34 SLQ-iTouch assetsd[281] <Error>: CGBitmapContextCreateImage: invalid context 0x0
> 

下面是我用来保存图片的代码。

- (IBAction)saveImage:(id)sender {

    HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    HUD.dimBackground = YES;
    HUD.labelText = @"Its saving!";
    self.imageOverlay.alpha = 1;
    self.savedImage = [self maskImage:self.imgView withMask:self.baseImgView];

    UIImageWriteToSavedPhotosAlbum(self.savedImage, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);
}

- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

    NSString *message;
    NSString *title;

    if (!error) {
        title = NSLocalizedString(@"Save Success", @"");
        message = NSLocalizedString(@"Save Success Message", @"");
        HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Checkmark.png"]];
        HUD.mode = MBProgressHUDModeCustomView; 
        HUD.labelText = @"We’re saved - WooHoo!!";
        [HUD hide:YES afterDelay:1.5];
        saved =1;
        self.imageOverlay.alpha =0.85;
        [self performSelector:@selector(saveSuccess) withObject:nil afterDelay:1.5];


    } else 
    {
        title = NSLocalizedString(@"Save Failed", @"");
        message = [error description];

        HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sad_face.png"]];
        HUD.mode = MBProgressHUDModeCustomView;
        HUD.labelText = @"Error! Try saving photo again :p";
        [HUD hide:YES afterDelay:3];
    }
}

- (UIImage*) maskImage:(UIImageView *)maskImage withMask:(UIImageView *)cropImage
{

    UIImage *image = nil;
    UIImage *imagePNG = nil;

    CGSize newImageSize = CGSizeMake(cropImage.frame.size.width, cropImage.frame.size.height);

    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, 0.0); //retina res
    [self.viewForImg.layer renderInContext:UIGraphicsGetCurrentContext()];

    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    NSData *imgData =  UIImagePNGRepresentation ( image ); // get PNG representation
    imagePNG = [UIImage imageWithData:imgData]; // wrap UIImage around PNG representation
    return imagePNG;
}

最佳答案

- (UIImage*) maskImage:(UIImageView *)maskImage withMask:(UIImageView *)cropImage
{

    UIImage *image = nil;
    UIImage *imagePNG = nil;

    CGSize newImageSize = CGSizeMake(cropImage.frame.size.width, cropImage.frame.size.height);

    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, 0.0); //retina res
    [self.viewForImg.layer renderInContext:UIGraphicsGetCurrentContext()];

    image = UIGraphicsGetImageFromCurrentImageContext();

    NSData *imgData =  UIImagePNGRepresentation ( image ); // get PNG representation
    imagePNG = [UIImage imageWithData:imgData]; // wrap UIImage around PNG representation
    UIGraphicsEndImageContext();    

    return imagePNG;
}

关于iphone - 某些 iPhone 4s 和 iPod Touch 上的随机 img 保存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10682400/

相关文章:

cocoa - 有没有一种简单的方法可以在 Cocoa 的 NSCell 中组合文本和图标?

ios - 新创建的测试用例类未显示在Xcode的“测试导航器”下

iphone - iOS 中的自动图像方向

iphone - 如何在 NSNotification 中传递 userInfo?

objective-c - 单击按钮以使用Xcode播放声音时调试器中的错误

iphone - 如何在 IOS SDK 中获取 Google Plus 圈子

xcode - UITableViewCell 与 UITextView 在滚动之前未对齐和剪切

ios - 如何快速使用 MBProgressHUD

iphone - IUI显示无效密码的方法

iphone - 为什么这个不同的 "addSubView"代码会导致行为差异