【问题标题】:How to search an Image file如何搜索图像文件
【发布时间】:2017-01-07 15:05:05
【问题描述】:

是否有办法检查我的 iPhone 中是否存在特定的图像文件。假设我的图像名称是 IMG_123.JPG。我想搜索这张图片,如果它存在,我想使用该文件创建一个NSInputStream 对象。如果图像不在NSBundle 中,则可以将其保存在照片库或其他地方。

请帮助我。 谢谢

更新

NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [pathArray objectAtIndex:0];
NSString* dataPath = [documentsDirectory  stringByAppendingPathComponent:@"IMG_2594.JPG"];

更新 2

当用户点击选择器图片时获取图片

copyOfOriginalImage = [UIImage imageWithCGImage:[[imageAsset defaultRepresentation] fullResolutionImage]];

将图片转换成NSData

imageData = UIImageJPEGRepresentation(copyOfOriginalImage, 1.0);

然后我把它转成base64

strEncoded=[imageData base64EncodedStringWithOptions:0];

【问题讨论】:

  • 图片文件是否在沙箱的文档目录中???
  • 不,我只是将它保存在我的照片库中
  • 可以说它是手机摄像头拍摄的图像。我可以使用图像选择器获取它的名称

标签: ios objective-c nsinputstream


【解决方案1】:

您的图片可以在您的应用程序中位于documentdirectoryassetsappbundle

位于photolibrary 中的图像,您不能将其称为应用程序数据库的一部分。

因此,您可以检查您的图像是否在documentdirectory 或任何目录(如tempdirectorycustomdirectory)中可用,如果您喜欢的话,

 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSFileManager *manager = [NSFileManager defaultManager];

NSArray *filesIndir = [manager contentsOfDirectoryAtPath:path error:nil];

if ([filesIndir containsObject:@"IMG_123.JPG"]) {

    NSLog(@"document directory contains : IMG_123.JPG");
}

它将直接检查文档目录。如果您在文档目录中创建自定义目录,请提供它的路径。

现在,如果您的图片在 app bundle 中,那么您可以像这样检查它,

  UIImage *image = [UIImage imageNamed:@"IMG_123.JPG"];

if (image) {

    NSLog(@"yes image available in app bundle");
}

如果您的图片在assests 中,那么您可以像这样查看它,

   UIImage *image2 = [UIImage imageNamed:@"IMG_123"];

if (image2) {

    NSLog(@"yes image available in assets");
}

现在,要检查照片库中是否有可用的图像,这是一项非常关键的任务,您应该拥有所有图像的列表,然后您可以检查它是否可用。为此,您必须使用ALAssetsLibrary

请参阅 This SO answer 以管理此问题。

您也可以参考this so post

【讨论】:

  • 到目前为止我所做的是首先从资产库中获取图像名称。然后我想搜索它的真实路径。查看我更新的问题。现在我想使用 NSInputStream 读取这个实际文件。
  • 我所做的方式是否正确,我可以使用 NSInputStream 使用此路径读取实际文件吗?
  • 你想达到什么目的?告诉我要求
  • 我想将用户选择的图像上传到我的服务器。服务器需要我的 UIImage 的字节数组。我编码为 base64 并发送到服务器。但是我的数据不被服务器接受。如果我使用在线工具对其进行编码并发送,然后发送它 qccept,我还检查了 iOS 和 Android 的相同图像,但 base64 字符串不同。但Android 1 被服务器接受。所以我检查了android如何从图像中获取字节数组。它使用 INputstream 来获取字节数据。就像这个 public static byte[] readBytesFromFile(File file) throws IOException {InputStream is = new FileInputStream(file);
  • 所以我也需要在 iOS 中做同样的事情
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多