我是 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/