Я пытаюсь сохранить изображение в одном из моих каталогов, которые я сделал вот так.Сохранение в каталог не работает
- (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];
Однако это не сработало, так как я создал представление коллекции, чтобы я мог видеть, что сохранено. Я бы показал код для него, если спросит. Также я получаю предупреждения, говорящие в конце моего кода, что неиспользуемый путь к папке переменной и путь к файлу переменной не инициализируются при использовании внутри в своей собственной инициализации. Моя конечная цель заключается в том, что пользователь делает фото в шляпах каталога. И он появляется в виде коллекции, который получает фотографию из шляпок каталога. Есть ли недостатки в моем коде?
Спасибо, что предупреждение исчезло. Как я могу проверить, сработало ли сохранение, если вы не используете симулятор? А также мне нужно написать больше кодов, говоря, что фотография, которую я хочу сохранить, находится в UIImage? Я не могу использовать симулятор, поскольку, как только изображение будет снято, оно отображается в UIImage. – Shouri
@Shouri Ну, проверьте верхний ответ здесь: http: //stackoverflow.com/a/8376586/716216 у него есть описание того, как перечислять все файлы в каталоге документов, и вы можете использовать это, чтобы определить, сохранен ли файл , И нет, не совсем. Фактически вы не сохраняете UIImage, а png-изображение. Когда придет время прочитать изображение, вы просто будете использовать '[UIImage imageWithContentsOfFile:'. И если этот ответ решил вашу оригинальную проблему, пожалуйста, не забудьте отметить как правильно :) –
Можете ли вы объяснить последний код '[UIImage imageWithContentsOfFile:« Означает ли это, что мой код настроен на сохранение? или мне нужно поместить код '[UIImage imageWithContentsOfFile:'? Сохраняет ли изображение, отображаемое в UIImage, это простое использование с использованием 4 кодов? извините за множество вопросов – Shouri