iOS - 将 jpeg 文件写入文件系统

标签 ios file-io jpeg

我是 iOS 开发新手,我正在尝试将图像作为 jpeg 文件写入文件系统。从日志中我知道这些文件确实已写入文件系统,但是当我尝试将它们保存到相机胶卷时,它们都显示为黑色。我使用以下代码将它们写入 jpeg 文件:

[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpegPath atomically:YES];

以下代码写入相机胶卷:

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

有人知道如何验证这些 jpeg 文件确实已写入文件系统吗?我在第二行代码中可能做错了什么?

编辑:所以这是整个方法:

- (BOOL)createImagesForSlides:(NSString *)documentsPath destinationURL:(NSURL *)destinationURL
{
    NSFileManager *manager = [NSFileManager defaultManager];
    CPDFDocument *document = [[CPDFDocument alloc] initWithURL:destinationURL];
    NSString *folderName = [NSString stringWithFormat:@"/%@", document.title];

    // create new folder
    NSString *newFolderPath = [documentsPath stringByAppendingString:folderName];
    BOOL result = [manager createDirectoryAtPath:newFolderPath withIntermediateDirectories:NO attributes:nil error:nil];

    // create a jpeg file for each page of the pdf file
    for (int i = 1; i <= document.numberOfPages; ++i) {
        NSString *jpegPath = [NSString stringWithFormat:@"%@/%d.jpg", newFolderPath, i];
        [UIImageJPEGRepresentation([[document pageForPageNumber:i] image], 1.0) writeToFile:jpegPath atomically:YES];

        UIImageWriteToSavedPhotosAlbum([[document pageForPageNumber:i] image], nil, nil, nil);
    }

    return result;
}

document 是一个指向 CPDFDocument 实例的指针,它来自 github 上的一些开源阅读器代码 (iOS-PDF-Reader)。我在这里基本上做的是抓取 pdf 文档的每一页,生成图像,然后将它们作为 jpeg 文件保存到文件系统中。奇怪的是,尽管文档有 10 多页,UIImageWriteToSavedPhotosAlbum 只将 5 个文件写入相机胶卷。知道为什么吗?

最佳答案

在这里了解如何构造 jpegPath 可能会有用。

首先,writeToFile:atomically: 返回一个 BOOL,因此请检查它是否是成功或失败的第一个指示。 有几种方法可以验证图像是否已写入文件系统。如果您在设备上运行,请使用类似 iExplorer 的内容访问文件系统并查看写入的文件。由于它是 NSData*,您可以检查文件大小以确保它看起来合理。在模拟器上,深入了解 ~/Library/Application Support/iPhone Simulator/ 下的文件夹结构并检查文件。在不查看文件系统本身的情况下,尝试将图像读回另一个 UIImage(在您的情况下为 imageWithData:,因为您正在编写 NSData* 对象)。

根据文档,您的 UIImageWriteToSavedPhotosAlbum 调用似乎没有任何问题。最后 3 个参数可以为 nil(都标记为可选),您只需要确保 UIImage 有效即可。您是否设置了断点以确保您拥有有效图像(Xcode 快速查看功能)?

关于iOS - 将 jpeg 文件写入文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495340/

相关文章:

ios - 核心数据建议

ios - NSUnknownKeyException UICollectionView

c# - 设置 Windows 文件安全性

java - 从文件中读取并在 textarea java 中显示

java - Delphi 到 Java 代码的转换

linux - 加载 *.jpg 时 cvLoadImage() 失败

ios - 主 VC 中的工具栏和 Modal VC 中的工具栏不会显示相同的按钮

IOS9 联系人框架无法更新链接的联系人

c - 程序每次从文件中扫描矩阵时都会跳过一行!

android - 直接从字节数组裁剪图像