ios开发,用相机拍摄了一个照片,然后写到沙盒目录下面,为什么图片桌面图标变得很大大呀,有没有可以帮忙解决一

iOS开发 本地图片加载失败_百度知道
iOS开发 本地图片加载失败
断点发现path为null:question,用[UIImage imageNamed,但是用NSString *path = [[NSBundle mainBundle] pathForResource?:question.icon]没问题?神马情况.icon]本地图片
提问者采纳
文件夹名/而NSString *path = [[NSBundle mainBundle] pathForResource.icon]是直接从当前的项目中读取文件;/可以打印路径看看是什么情况NSlog(@“%@”,可以实现:question.icon].icon“].icon具体实现是这样的;/程序包的根目录(沙盒路径)
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];是从沙盒路径中读取文件,只用question,question,如果图片是放在文件夹中的话.icon是不够的,还要加上这个文件夹的名字;UIImage *image = [UIImage imageWithContentsOfF&#47,应该加上当前的沙盒路径;完整的图片路径,如果你的沙盒路径中还有一个存放图片的文件夹的话.icon应该改为:@”question:沙盒路径&#47,imagePath):/&#47,因为用[UIImage imageN&#47:imagePath]这肯定的啊,还要在中间加上文件夹的路径 NSString *imagepath = [resourcePath stringByAppendingPathComponent
提问者评价
谢谢 其实早就发现了 因为处于学习阶段各种错误和找错
其他类似问题
为您推荐:
其他2条回答
p>上面写的都有问题:@&[UIImage&另外一种方法NSString&*path&nbsp,应该是这样UIImage&imageN*img&=&nbsp.icon&quot:@“question”&imageWithContentOfF[UIImage&UIImage&nbsp:@&];mainBundle]&=&nbsp:path];[[NSBundle&pathForR];=&ofTicon&*img&nbsp
question.icon已经是NSString类型的,是图片名,问题里面我省略了几个语句。你说的是pathForResource:这个方法不能用了吗? 必须用pathForResource:ofType:?
可以那样用。最好使用NSLog来看看path是否取到。重点是使用UIImage 的类方法imageWithContentOfFile 这个来得到UIImage对象。
问题就是断点发现path为nil,那么用imageWithContentOfFile:path就不可能返回一个UIImage,而使用imageNamed:是完全可以取得这张图片的。但是由于这个UIImageView里面要用到很多image,用imageNamed:耗用的内存达到一个恐怖的程度,所以只能使用imageWithContentOfFile:。
如果path为nil,说明你调用函数指定的图片名称或路径不正确导致的。如果是本地资源图片,上面的代码是可以成功拿到图片路径的。你自己检查一下,你的图片是不是被包含在一个实际的目录下,而非引用的group文件夹中,如果是那样的话,你在获取时还需要带上图片所在的目录。如NSString *path = [[NSBundle mainBundle] pathForResource:@“/image/question” ofType:@&icon&];
问题是imageNamed:能取到的图片[[NSBundle mainBundle] pathForResource:question.icon]取出失败question.icon怎么看像图片名了 question是模型 .icon是模型属性&
1、你没有吧图片加载到你的项目中2、你在加载图片的时候,图片的名称 出错3、 UIImage *image = [UIImage imageNamed:@&xxx.png&];
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁iOS 图片上传处理 图片压缩 图片处理 - 简书
下载简书移动应用
写了17967字,被10人关注,获得了12个喜欢
iOS 图片上传处理 图片压缩 图片处理
提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用。在这里,我们需要过UIImagePickerController类来和用户交互。使用UIImagePickerController和用户交互,我们需要实现2个协议。View Code代码如下复制代码#pragma mark 从用户相册获取活动图片- (void)pickImageFromAlbum{imagePicker = [[UIImagePickerController alloc] init];imagePicker.delegate =imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLimagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVimagePicker.allowsEditing =YES;[self presentModalViewController:imagePicker animated:YES];}我们来看看上面的从相册获取图片,我们首先要实例化UIImagePickerController对象,然后设置imagePicker对象为当前对象,设置imagePicker的图片来源为UIImagePickerControllerSourceTypePhotoLibrary,表明当前图片的来源为相册,除此之外还可以设置用户对图片是否可编辑。View Code代码如下复制代码#pragma mark 从摄像头获取活动图片- (void)pickImageFromCamera{imagePicker = [[UIImagePickerController alloc] init];imagePicker.delegate =imagePicker.sourceType = UIImagePickerControllerSourceTypeCimagePicker.modalTransitionStyle = UIModalTransitionStyleCoverVimagePicker.allowsEditing =YES;[self presentModalViewController:imagePicker animated:YES];}//打开相机- (IBAction)touch_photo:(id)sender {// for iphoneUIImagePickerController *pickerImage = [[UIImagePickerController alloc] init];if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {pickerImage.sourceType = UIImagePickerControllerSourceTypeCpickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType];}pickerImage.delegate =pickerImage.allowsEditing =YES;//自定义照片样式[self presentViewController:pickerImage animated:YES completion:nil];}以上是从摄像头获取图片,和从相册获取图片只是图片来源的设置不一样,摄像头图片的来源为UIImagePickerControllerSourceTypeCamera。在和用户交互之后,用户选择好图片后,会回调选择结束的方法。-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info{//初始化imageNew为从相机中获得的--UIImage *imageNew = [info objectForKey:@"UIImagePickerControllerOriginalImage"];//设置image的尺寸CGSize imagesize = imageNew.imagesize.height =626;imagesize.width =413;//对图片大小进行压缩--imageNew = [self imageWithImage:imageNew scaledToSize:imagesize];NSData *imageData = UIImageJPEGRepresentation(imageNew,0.00001);if(m_selectImage==nil){m_selectImage = [UIImage imageWithData:imageData];NSLog(@"m_selectImage:%@",m_selectImage);[self.TakePhotoBtn setImage:m_selectImage forState:UIControlStateNormal];[picker dismissModalViewControllerAnimated:YES];}[picker release];}//对图片尺寸进行压缩---(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize{// Create a graphics image contextUIGraphicsBeginImageContext(newSize);// Tell the old image to draw in this new context, with the desired// new size[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];// Get the new image from the contextUIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();// End the contextUIGraphicsEndImageContext();// Return the new image.return newI}图片保存到本地document里面--以及图片格式的转换IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];if ([mediaType isEqualToString:@"public.image"]){image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];NSData *if (UIImagePNGRepresentation(image) == nil) {data = UIImageJPEGRepresentation(image, 1);} else {data = UIImagePNGRepresentation(image);}NSFileManager *fileManager = [NSFileManager defaultManager];NSString *filePath = [NSString stringWithString:[self getPath:@"image1"]];
//将图片存储到本地documents[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:dataattributes:nil];UIImage *editedImage = [[UIImage alloc] init];editedImage =CGRect rect = CGRectMake(0, 0, 64, 96);UIGraphicsBeginImageContext(rect.size);[editedImage drawInRect:rect];editedImage = UIGraphicsGetImageFromCurrentImageContext();UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];imageButton.frame = CGRectMake(10, 10, 64, 96);[imageButton setImage:editedImage forState:UIControlStateNormal];[self.view addSubview:imageButton];[imageButton addTarget:self action:@selector(imageAction:)forControlEvents:UIControlEventTouchUpInside];[ipc dismissModalViewControllerAnimated:YES];} else {NSLog(@"MEdia");}上面的代码是当从相册里面选取图片之后保存到本地程序沙盒,在上面我们得到的图片中不能够得到图片名字,以及不清楚图片格式,所以这个时候我们需要将其转换成NSdata二进制存储,image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];NSData *if (UIImagePNGRepresentation(image) == nil) {data = UIImageJPEGRepresentation(image, 1);} else {data = UIImagePNGRepresentation(image);}UIImagePNGRepresentation转换PNG格式的图片为二进制,如果图片的格式为JPEG则返回nil;[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.png"] contents:data attributes:nil];
将图片保存为PNG格式[fileManager createFileAtPath:[filePath stringByAppendingString:@"/image.jpg"] contents:data attributes:nil];
将图片保存为JPEG格式我们也可以写成下面的格式存储图片NSString *pngImage = [filePath stringByAppendingPathComponent:@"Documents/image.png"];NSString *jpgImage = [filePath stringByAppendingPathComponent:@"Documents/image.jpg"];[data writeToFile:pngImage atomically:YES];[data writeToFile:jpgImage atomically:YES];
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
iOS 拍照 访问系统相册 图片的相关操作 图片上传服务器 等等
· 1人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.
documents,tmp,app,Library。
(NSHomeDirectory()),
手动保存的文件在documents文件里
Nsuserdefaults保存的文件在tmp文件夹里
1、Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。
2、AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。
3、Library 目录:这个目录下有两个子目录:Caches 和 PreferencesPreferences 目录:包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好.Caches 目录:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。
4、tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
获取这些目录路径的方法:1,获取家目录路径的函数:NSString *homeDir = NSHomeDirectory();2,获取Documents目录路径的方法:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *docDir = [paths objectAtIndex:0];3,获取Caches目录路径的方法:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);NSString *cachesDir = [paths objectAtIndex:0];4,获取tmp目录路径的方法:NSString *tmpDir = NSTemporaryDirectory();5,获取应用程序程序包中资源文件路径的方法:例如获取程序包中一个图片资源(apple.png)路径的方法:NSString *imagePath = [[NSBundle mainBundle] pathForResource:@&apple& ofType:@&png&];UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];代码中的mainBundle类方法用于返回一个代表应用程序包的对象。
iphone沙盒(sandbox)中的几个目录获取方式:
NSString&*homeDir&=&NSHomeDirectory();&&
NSArray&*paths&=&NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,&NSUserDomainMask,&YES);&&
NSString&*docDir&=&[paths&objectAtIndex:0];&&
NSArray&*paths&=&NSSearchPathForDirectoriesInDomains(NSCachesDirectory,&NSUserDomainMask,&YES);&&
NSString&*cachesDir&=&[paths&objectAtIndex:0];&&
NSString&*tmpDir&=&&NSTemporaryDirectory();&&
NSString&*imagePath&=&[[NSBundle&mainBundle]&pathForResource:@"apple"&ofType:@"png"];&&
UIImage&*appleImage&=&[[UIImage&alloc]&initWithContentsOfFile:imagePath];&&
NSFileManager* fm=[NSFileManager defaultManager];if(![fm fileExistsAtPath:[self dataFilePath]]){
//下面是对该文件进行制定路径的保存[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];
//取得一个目录下得所有文件名NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];
//读取某个文件NSData *data = [fm contentsAtPath:[self dataFilePath]];
//或者NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];}
阅读(...) 评论()IOS沙盒机制(SandBox) - 沧海一粟-啊添 - 博客园
随笔 - 114
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。
1.每个应用程序都在自己的沙盒内
2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容
3.应用程序向外请求或接收数据都需要经过权限认证
查看模拟器的沙盒文件夹在Mac电脑上的存储位置,首先,这个文件夹是被隐藏的,所以要先将这些文件显示出来,打开命令行:
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
然后重新启动Finder,点击屏幕左上角苹果标志&&强制退出&&选择Finder然后点击重新启动,这个时候在重新打开Finder就可以看到被隐藏的文件了。
还有一种比较简单的办法就是直接点击Finder图标右键&&前往文件夹&&输入/Users/your username/Library/Application Support/iPhone Simulator/ ,然后确认就可以了。your username是你本机的用户名
然后按下图进入相应的文件夹,就可以到模拟器的沙盒文件目录了:
接着进入一个模拟器版本,我这里是5.1
然后可以看到Applications下面存放的就是模拟器中所装的开发的应用程序,随便进入一个后可以看到,一个沙盒中包含了四个部分,如图所示:
分别是.app文件,这个就是可运行的应用文件,Documents,苹 果建议将程序中创建的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录;Library,存储程序的默认设置或其它 状态信息;Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除;tmp,创建和存放临时文件的地 方。
下面通过代码来获取这些目录:
//获取根目录
NSString *homePath = NSHomeDirectory();
NSLog(@"Home目录:%@",homePath);
//获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSLog(@"Documents目录:%@",documentsPath);
//获取Cache目录
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];
NSLog(@"Cache目录:%@",cachePath);
//Library目录
NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath = [libsPath objectAtIndex:0];
NSLog(@"Library目录:%@",libPath);
//temp目录
NSString *tempPath = NSTemporaryDirectory();
NSLog(@"temp目录:%@",tempPath);
输出结果如下:
<span style="color: #-08-03 11:10:24.325 SandBoxTest[1] Home目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E
<span style="color: #-08-03 11:10:24.325 SandBoxTest[1] Documents目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E/Documents
<span style="color: #-08-03 11:10:24.326 SandBoxTest[1] Cache目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E/Library/Caches
<span style="color: #-08-03 11:10:24.326 SandBoxTest[1] Library目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E/Library
<span style="color: #-08-03 11:10:24.326 SandBoxTest[1] temp目录:/var/folders/7z/1wj5h8zx7b59c02pxmpynd500000gn/T/
下面开始向目录里面创建文件,然后向文件里面写入内容:
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
//写入文件
if (!documentsPath) {
NSLog(@"目录未找到");
NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];
NSArray *array = [NSArray arrayWithObjects:@"Title",@"Contents", nil];
[array writeToFile:filePaht atomically:YES];
创建成功后打开文件夹目录,可以看到test.txt文件:
接下来是把该文件中的内容读出来:
//读取文件
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSString *readPath = [documentsPath stringByAppendingPathComponent:@"test.txt"];
NSArray *fileContent = [[NSArrayalloc] initWithContentsOfFile:readPath];
NSLog(@"文件内容:%@",fileContent);
输出结果如下:
<span style="color: #-08-03 11:26:53.594 SandBoxTest[1] 文件内容:(
&&& Title,
&&& Contents}

我要回帖

更多关于 excel突然变得很大 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信