5

が提供する URL で画像を作成しますPHContentEditingOutput。このようにデータをロードしUIImageて保存すると、機能します。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    NSData *data = [NSData dataWithContentsOfURL:contentEditingOutput.renderedContentURL]
    UIImage *image = [UIImage imageWithData:data];
    [PHAssetChangeRequest creationRequestForAssetFromImage:image];
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

しかし、URLでアプローチしようとすると失敗します:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:contentEditingOutput.renderedContentURL];
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

エラー:

エラー Domain=NSCocoaErrorDomain Code=-1 "The operation could not be completed. (Cocoa error -1.)"

アップデート:

変更を保存しようとすると、同じエラーが発生します。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset];
    request.contentEditingOutput = contentEditingOutput;
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

このメソッドはビデオ ( creationRequestForAssetFromVideoAtFileURL:) では機能しますが、画像では機能しません。何が悪かったのか?

4

2 に答える 2

7

問題はファイル形式にあります。PNGスクリーンショットを編集しようとしましたrenderingContentURLが、常にtmp/filename でした。JPG . 最初はバグだと思っていましたが、ドキュメントによるとこれは正しい動作です。

レンダリングされたContentURL

編集されたアセット コンテンツを書き込むための URL を見つけるには、このプロパティを読み取ります。次に、写真アセットを編集する場合は、変更された写真イメージをこの URL の JPEG 形式のファイルに書き込みます。ビデオ アセットを編集する場合は、ビデオをこの URL の QuickTime (.mov) ファイルにエクスポートします。

解決策は、関数で画像を変換することです

NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);
于 2015-02-06T09:15:09.797 に答える