【问题标题】:Rotation of images stored in documents directory旋转存储在文档目录中的图像
【发布时间】:2013-12-02 13:39:58
【问题描述】:

我编写了一个应用程序,允许用户拍摄照片,这些照片存储在NSArray 中,然后保存在Documents directory 中。重新加载时,图片会存储在 UITableView 中 - 请注意,由于问题 1,当前仅加载了一张照片。

我有两个问题:

1 - 这仅适用于一张照片,因为我需要能够计算出已存储了多少张照片。

2 - 当我重新加载数据并放入UIImageView 时,照片的旋转不正确。横向照片是颠倒的,纵向照片是横向的。

非常感谢任何有关这些问题的帮助。

保存照片

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

for (int i=0;i<photoCount;i++)
{
    UIImage *image = [photos objectAtIndex:i];
    NSString *savePicturePath = [saveFolderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"image_%d",i]];
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:savePicturePath atomically:NO];
}

检索照片

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getPicPath = [documentsDirectory stringByAppendingPathComponent:@"image_0"];
NSData *picData = [[NSFileManager defaultManager] contentsAtPath:getPicPath];

UIImage *loadedImage = [UIImage imageWithData:picData];
[photos addObject:loadedImage];
[self.tableView reloadData];

向表格添加图片

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"photoCell"];
UIImage *currentImage = [self.photos objectAtIndex:indexPath.row];
cell.imageView.image = currentImage;
return cell;
}

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您可以通过创建自己的目录并将所有图像存储到该目录来解决第一个问题。然后,当您阅读时,使用NSFileManager's contentsOfDirectoryAtPath 获取该目录中所有图像的数组。或者您可以读取文档文件夹的内容并使用 NSPredicate 按文件扩展名仅过滤掉图像(使用filteredArrayUsingPredicate)。

    至于轮换问题,here有答案。

    【讨论】:

    • 谢谢。事实上,我确实为图像创建了一个文件夹,但我删除了这里的代码以防止它太长。我将研究 contentsOfDirectoryAtPath - 我认为它返回目录内容数组是否正确?另一个答案很好地解释了事情 - 非常感谢。
    【解决方案2】:

    轮换问题……很简单:

    改变

    NSData *imageData = UIImagePNGRepresentation(image);
    

    NSData *imageData = UIImageJPGRepresentation(image, 1.0);
    

    一切都很完美。感谢 Joel 为我指明了正确的方向。

    【讨论】:

      猜你喜欢
      • 2014-08-19
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2018-08-22
      • 2014-04-03
      • 2013-07-29
      相关资源
      最近更新 更多