1

私の質問を理解するには、次の手順を実行してください。

  • 私のアプリケーションでは、ユーザーは最初にボタンをタップします。
  • イメージピッカーコントローラーが表示されます
  • ユーザーが画像を選択するか、そこから画像を選択します。
  • そのすべての画像を iPhone アプリケーションに保存する必要があります。

私はすでにこれを実装しており、これを行うために次のコードを実装しました。

 -(IBAction)setPhoto:(id)sender {
    facPhotoPicker=[[UIImagePickerController alloc]init];
    facPhotoPicker.delegate=self;
    facPhotoPicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
    facPhotoPicker.allowsImageEditing=YES;
    facPhotoPicker.navigationBar.barStyle=UIBarStyleBlackOpaque;
    [self presentModalViewController:facPhotoPicker animated:YES];
}

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {
    NSData *imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],1);
    UIImage *img=[[UIImage alloc] initWithData:imgData];
    facImgView.image=img;
    [img release];
    NSString *str=[NSString stringWithFormat:@"%i.jpg",[currentFaculty facultyNo]];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0], str];
    [imgData writeToFile:path atomically:YES];
    [picker dismissModalViewControllerAnimated:YES];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissModalViewControllerAnimated:YES];
}

しかし問題は、ユーザーの iPhone の画像の方が大きい可能性があることです。

その大きな画像をアプリケーション内に保存したくありません。例えば

  • ユーザーはサイズが 1200 x 800 の画像を選択します
  • しかし、私は80 x 80サイズの画像だけが欲しい

    1. 選択した画像のサイズを自分の要件に合わせて縮小する必要があります / 8 MB の画像を 500 kb 未満にします
    2. ドキュメントディレクトリに保存するのではなく、リソースディレクトリに画像を保存する方法は?
4

3 に答える 3

8

これで解決です。

ダウンサイジングの要。画像を 116 kb まで縮小しました。


NSData *imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],compressionRatio);
while ([imgData length]>50000) { 
    compressionRatio=compressionRatio*0.5;
    imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],compressionRatio);
}

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
double compressionRatio=1;
NSData *imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],compressionRatio);
while ([imgData length]>50000) { 
    compressionRatio=compressionRatio*0.5;
    imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],compressionRatio);
}
UIImage *img=[[UIImage alloc] initWithData:imgData];
facImgView.image=img;
NSLog(@"%@",[info objectForKey:@"UIImagePickerControllerOriginalImage"],3);
[img release];


NSString *str=[NSString stringWithFormat:@"%i.jpg",[currentFaculty facultyNo]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [NSString stringWithFormat:@"%@", [paths objectAtIndex:0]];
path=[path stringByDeletingLastPathComponent];
path=[NSString stringWithFormat:@"%@/%@",path,str];
[imgData writeToFile:path atomically:YES];
[picker dismissModalViewControllerAnimated:YES];
}
于 2009-09-18T19:50:48.677 に答える
2

2) アプリケーション内の任意のディレクトリにある Resources ディレクトリに保存することはできません。

于 2009-09-18T17:41:19.763 に答える
0
  1. 次のロジックを実装することで、任意のリソース ディレクトリ/ドキュメント ディレクトリの上位ディレクトリに格納できます。

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
NSData *imgData=UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],1);
UIImage *img=[[UIImage alloc] initWithData:imgData];
facImgView.image=img;
NSLog(@"%@",[info objectForKey:@"UIImagePickerControllerOriginalImage"],3);
[img release];
NSString *str=[NSString stringWithFormat:@"%i.jpg",[currentFaculty facultyNo]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [NSString stringWithFormat:@"%@", [paths objectAtIndex:0]];
path=[path stringByDeletingLastPathComponent];
path=[NSString stringWithFormat:@"%@/%@",path,str]; // storing path
[imgData writeToFile:path atomically:YES]; // stores successfully 
[picker dismissModalViewControllerAnimated:YES];
}
于 2009-09-18T18:01:34.967 に答える