2013-08-16 3 views
0

Я пытаюсь сохранить изображение в одном из моих каталогов, которые я сделал вот так.Сохранение в каталог не работает

- (void) processImage:(UIImage *)image { //process captured image, crop, resize and rotate 
    haveImage = YES; 

    if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) { //Device is ipad 
     // Resize image 
     UIGraphicsBeginImageContext(CGSizeMake(768, 1022)); 
     [image drawInRect: CGRectMake(0, 0, 768, 1022)]; 
     UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     CGRect cropRect = CGRectMake(0, 130, 768, 768); 
     CGImageRef imageRef = CGImageCreateWithImageInRect([smallImage CGImage], cropRect); 
     //or use the UIImage wherever you like 

     [captureImage setImage:[UIImage imageWithCGImage:imageRef]]; 

     CGImageRelease(imageRef); 

    }else{ //Device is iphone 
     // Resize image 
     UIGraphicsBeginImageContext(CGSizeMake(320, 426)); 
     [image drawInRect: CGRectMake(0, 0, 320, 426)]; 
     UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     CGRect cropRect = CGRectMake(0, 55, 320, 320); 
     CGImageRef imageRef = CGImageCreateWithImageInRect([smallImage CGImage], cropRect); 

     [captureImage setImage:[UIImage imageWithCGImage:imageRef]]; 

     CGImageRelease(imageRef); 
    } 

    //adjust image orientation based on device orientation 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) { 
     NSLog(@"landscape left image"); 

     [UIView beginAnimations:@"rotate" context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     captureImage.transform = CGAffineTransformMakeRotation(DegreesToRadians(-90)); 
     [UIView commitAnimations]; 

    } 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) { 
     NSLog(@"landscape right"); 

     [UIView beginAnimations:@"rotate" context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     captureImage.transform = CGAffineTransformMakeRotation(DegreesToRadians(90)); 
     [UIView commitAnimations]; 

    } 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) { 
     NSLog(@"upside down"); 
     [UIView beginAnimations:@"rotate" context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     captureImage.transform = CGAffineTransformMakeRotation(DegreesToRadians(180)); 
     [UIView commitAnimations]; 

    } 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) { 
     NSLog(@"upside upright"); 
     [UIView beginAnimations:@"rotate" context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     captureImage.transform = CGAffineTransformMakeRotation(DegreesToRadians(0)); 
     [UIView commitAnimations]; 

     NSArray *directoryNames = [NSArray arrayWithObjects:@"hats",@"bottoms",@"right",@"left",nil]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 

     for (int i = 0; i < [directoryNames count] ; i++) { 
      NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:[directoryNames objectAtIndex:i]]; 
      if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
       [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; //Create folder 

     NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"hats"]; 
     NSString *filePath = [filePath stringByAppendingPathComponent:@"IMAGE_NAME_HERE.PNG"]; 
     NSData *imageData = UIImagePNGRepresentation(captureImage.image); 
     [imageData writeToFile:filePath atomically:YES]; 

Однако это не сработало, так как я создал представление коллекции, чтобы я мог видеть, что сохранено. Я бы показал код для него, если спросит. Также я получаю предупреждения, говорящие в конце моего кода, что неиспользуемый путь к папке переменной и путь к файлу переменной не инициализируются при использовании внутри в своей собственной инициализации. Моя конечная цель заключается в том, что пользователь делает фото в шляпах каталога. И он появляется в виде коллекции, который получает фотографию из шляпок каталога. Есть ли недостатки в моем коде?

ответ

0

Вы делаете это:

NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"hats"]; 
NSString *filePath = [filePath stringByAppendingPathComponent:@"IMAGE_NAME_HERE.PNG"]; 

Когда я думаю, что вы имеете в виду, чтобы делать это:

NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"hats"]; 
NSString *filePath = [folderPath stringByAppendingPathComponent:@"IMAGE_NAME_HERE.PNG"]; 

В принципе, у вас есть неиспользуемое переменное предупреждение для folderPath, потому что вы ошибочно написали NSString *filePath = [filePath ... который полностью игнорирует путь к папке, создает пустую строку и добавляет к ней имя файла. Если вы зарегистрируете эту строку, вы увидите, что она выводит только ваше имя файла, без пути к каталогу документов, который к нему добавлен.

+0

Спасибо, что предупреждение исчезло. Как я могу проверить, сработало ли сохранение, если вы не используете симулятор? А также мне нужно написать больше кодов, говоря, что фотография, которую я хочу сохранить, находится в UIImage? Я не могу использовать симулятор, поскольку, как только изображение будет снято, оно отображается в UIImage. – Shouri

+0

@Shouri Ну, проверьте верхний ответ здесь: http: //stackoverflow.com/a/8376586/716216 у него есть описание того, как перечислять все файлы в каталоге документов, и вы можете использовать это, чтобы определить, сохранен ли файл , И нет, не совсем. Фактически вы не сохраняете UIImage, а png-изображение. Когда придет время прочитать изображение, вы просто будете использовать '[UIImage imageWithContentsOfFile:'. И если этот ответ решил вашу оригинальную проблему, пожалуйста, не забудьте отметить как правильно :) –

+0

Можете ли вы объяснить последний код '[UIImage imageWithContentsOfFile:« Означает ли это, что мой код настроен на сохранение? или мне нужно поместить код '[UIImage imageWithContentsOfFile:'? Сохраняет ли изображение, отображаемое в UIImage, это простое использование с использованием 4 кодов? извините за множество вопросов – Shouri

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