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

时间:2014-03-19 03:00:22

标签: 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个文件写入相机胶卷。知道为什么吗?

1 个答案:

答案 0 :(得分:1)

在这里看看你如何构建jpegPath可能会很有用。

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

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