Tôi đang cố gắng thêm siêu dữ liệu vào tổng hợp được tạo và lưu siêu dữ liệu vào thư viện ảnh bằng cách sử dụng khung Ảnh. Tôi đã lưu và chỉnh sửa làm việc nhưng tôi chỉ có thể tìm ra cách để thêm siêu dữ liệu. Tôi đã thử nhiều cách tiếp cận như thêm siêu dữ liệu bằng cách tạo hình ảnh CoreGraphics (xem mã bên dưới). Tất cả các phương pháp này không cho tôi lỗi nhưng tôi không thể thấy siêu dữ liệu khi tôi mở hình ảnh trên máy Mac của mình.Lưu siêu dữ liệu cho hình ảnh tùy chỉnh bằng Swift (iOS) và Khung ảnh
Có ai có thể chỉ cho tôi đúng hướng ở đây không?
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assets : PHFetchResult = PHAsset.fetchAssetsWithLocalIdentifiers([self.localIdentifier], options: nil);
let asset : PHAsset = assets[0] as! PHAsset;
let changeRequest = PHAssetChangeRequest(forAsset: asset);
changeRequest.location = self.currentLocation;
asset.requestContentEditingInputWithOptions(nil, completionHandler: { (input: PHContentEditingInput?,
info: [NSObject : AnyObject]) -> Void in
guard let input = input else { return }
let imageManager : PHImageManager = PHImageManager();
let requestoptions : PHImageRequestOptions = PHImageRequestOptions();
requestoptions.resizeMode = PHImageRequestOptionsResizeMode.None;
imageManager.requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.Default, options: PHImageRequestOptions(), resultHandler: { (let image : UIImage?, _) -> Void in
let output : PHContentEditingOutput = PHContentEditingOutput(contentEditingInput: input);
PHPhotoLibrary.sharedPhotoLibrary().performChanges({() -> Void in
let changeRequest = PHAssetChangeRequest(forAsset: asset);
/* Neu */
let imageData : NSData = NSData(contentsOfURL: (input.fullSizeImageURL)!)!;
let image : CIImage = CIImage(data: imageData)!;
let dataPtr = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(imageData.bytes), imageData.length)
// Save off the properties
let imageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!;
var metadata : NSMutableDictionary = NSMutableDictionary(dictionary: CGImageSourceCopyProperties(imageSource, nil)!);
/* Add some values to metadata */
....
NSLog("New metadata: %@", metadata);
// Save the image
let outputImageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!;
let jpegData : CFMutableDataRef = CFDataCreateMutable(kCFAllocatorDefault, 0);
let outputDestination : CGImageDestinationRef = CGImageDestinationCreateWithData(jpegData, CGImageSourceGetType(outputImageSource)!, 1, nil)!;
// add the image data to the destination
CGImageDestinationAddImageFromSource(outputDestination, outputImageSource, 0, metadata);
if CGImageDestinationFinalize(outputDestination)
{
NSLog("Successful image creation.");
// process the image rendering, adjustment data creation and finalize the asset edit.
}
else
{
NSLog("Image creation failed.");
}
(jpegData as NSData).writeToURL(output.renderedContentURL, atomically: true);
let options : String = NSString(format: "%f|%f|%f|%f|%f|%f", self.saturationSlider.value, self.warmthSlider.value, self.brightnessSlider.value, self.sharpnessSlider.value, self.contrastSlider.value, self.gammaSlider.value) as String;
let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"];
output.adjustmentData = PHAdjustmentData(formatIdentifier: NSBundle.mainBundle().bundleIdentifier!,
formatVersion: nsObject as! String,
data: options.dataUsingEncoding(NSUTF8StringEncoding)!);
changeRequest.contentEditingOutput = output;
}, completionHandler: { (_bool, _error) -> Void in
if !_bool && error != nil
{
NSLog("%@", error!);
}
});
});
});
}, completionHandler: { (_bool, _error) -> Void in
});
Hơn một năm sau, nhưng tôi đang tìm kết quả tương tự. Không có lỗi, nhưng cũng không có siêu dữ liệu tùy chỉnh. Mặc dù khung Ảnh quảng cáo "chỉnh sửa siêu dữ liệu" cho nội dung, nhưng rõ ràng không cung cấp chỉnh sửa siêu dữ liệu loại EXIF thực tế. – snakeoil
Tôi đã gặp phải sự cố tương tự. Tôi đã đăng phiên bản của riêng mình về câu hỏi này https://stackoverflow.com/questions/48255636/editing-photo-metadata-and-phadjustmentdata. Nó xuất hiện chỉnh sửa các thuộc tính exif hoạt động nếu hình ảnh đã có một PHAdjustmentData được đính kèm từ một ứng dụng khác. Cuối cùng tôi đã từ bỏ và thêm một id vào thuộc tính nhận xét exif về tạo ảnh và sử dụng nó để lập chỉ mục một từ điển lưu trữ siêu dữ liệu bổ sung mà tôi đã lưu trữ trong Dữ liệu cốt lõi. – Spads