私のアプリでは、ユーザが画像を選択/撮影してから、その画像をUIImageView
に表示したいと考えています。問題は、私の研究を通じて、画像を保存/ロードする方法がたくさんあることがわかりましたが、明らかに画像が.png
か.jpg
かどうかを知ることに問題があります。だから、私はいろいろなことを試してきましたが、それを働かせるようには見えません。助けを前にありがとう。UIImagesの保存と読み込み
画像が(私はユーザーが写真を撮るか、カメラロールから画像を選択するオプションを与えて)選択された後のためHERESに私のコード:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if (!image) image = [info objectForKey:UIImagePickerControllerOriginalImage];
if (!image)
return;
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *whichPic = @""
if (whichPicture == pictureA)
whichPic = @"kpictureA";
else
whichPic = @"kpictureB";
[defaults setObject:imageData forKey:whichPic];
[defaults synchronize];
私はこれを試してみましたが、得ることができませんでしたそれは動作します
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];
[library writeImageToSavedPhotosAlbum:[image CGImage] metadata:metadata completionBlock:nil];
:
// Create paths to output images
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.jpg"];
// Write a UIImage to JPEG with minimum compression (best quality)
// The value 'image' must be a UIImage object
// The value '1.0' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];
// Write image to PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];
// Let's check to see if files were successfully written...
// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
*/
は、私もこれを試してみましたが、無駄にビュー負荷そしてイメージをロードする
は、私はこれを試みた:
// Create paths to output images
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Before.jpg"];
// Let's check to see if files were successfully written...
// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
if ([[fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error] containsObject:@"pictureA.png"]) {
NSData *imageData = [fileMgr contentsAtPath:@"Documents/Before.png"];
[pcitureAButton setImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];
}
else if ([fileMgr contentsAtPath:@"Documents/pictureA.png"]) {
NSData *imageData = [fileMgr contentsAtPath:@"Documents/pictureA.png"];
[pictureButton setImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];
}
それから私はこの試み:
if([defaults valueForKey:@"kPictureA"]) {
UIImage *image = [[UIImage alloc] initWithData:[defaults valueForKey:kPictureA]];
[pictureAButton setImage:image forState:UIControlStateNormal];
}
を、最終的に、私はNSUserDefeaults
とともに使用NSData
を試みました。
NSUserDefaultsは私が最も気に入っているので使いたいと思っていますが、私は確かに解決策を見つけることができます。
はキャンセルをタップユーザーへの対応ライブラリ- (IBAction)openPhotoLibrary:(id)sender{
UIImagePickerController *libraryPicker = [[UIImagePickerController alloc] init];
libraryPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
libraryPicker.allowsEditing = YES;
libraryPicker.delegate = self;
//Displays only picture option;
libraryPicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
[self presentModalViewController: libraryPicker animated: YES];
[libraryPicker release];
}
から
- (IBAction)openCamera:(id)sender{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES){
UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraUI.allowsEditing = YES;
cameraUI.delegate = self;
//Displays only picture option;
cameraUI.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
[self presentModalViewController: cameraUI animated: YES];
[cameraUI release];
}else{
[self openPhotoLibrary:nil];
}
}
写真を選択して写真を撮る:
NSDataに変換する際に重要な.pngか.jpegを確認するにはどうすればいいですか? – Andrew
@Andrew編集をチェックすると、あなたが尋ねたことだけを行う方法が見つかるでしょう。 – Cyprian
とにかく、私はそのメソッドの議論を 'UIImage'、bec NSDataを確認するには、そのjpeg/pngがNSDataに変換する必要があるかどうかを確認してください。 NSDataに変換するには、jpegかpngかどうかを知る必要があります。ハハ – Andrew