評論我要添加在圖像文件頭中的評論(縣)。由於我能夠在UserComment下添加對EXIF元數據的評論,但我想在圖像文件頭中添加多個評論。添加圖像文件頭
我該使用哪個框架?對於UserComment,我使用的是ImageIO框架。
評論我要添加在圖像文件頭中的評論(縣)。由於我能夠在UserComment下添加對EXIF元數據的評論,但我想在圖像文件頭中添加多個評論。添加圖像文件頭
我該使用哪個框架?對於UserComment,我使用的是ImageIO框架。
下面介紹如何在Swift中向JPEG圖像添加註釋(即而不是 EXIF UserComment)。我不認爲這可以使用ImageIO框架完成。
的代碼來自wrjpgcom
命令行工具,寫在的libjpeg庫C.它的一部分。檢查source code以獲取更詳細的註釋(它實際上並不使用libjpeg)。
我們將只SOFn之前插入新的註釋標記。這(a)導致新的評論出現在現有評論之後而不是之前;和(b)確保按照JFIF規範的要求在任何JFIF或JFXX標記之後提供註釋。
import Foundation
func addJPEGComment(to jpegData: inout Data, _ comment: String) {
// find index of first SOF marker, or EOI
let sofMarkers: [UInt8] = [
0xC0, 0xC1, 0xC2, 0xC3, 0xC5, 0xC6,
0xC7, 0xC9, 0xCA, 0xCB, 0xCD, 0xCE,
0xCF, 0xD9 // EOI
]
var firstSOFRange: Range<Data.Index>?
for marker in sofMarkers {
if let range = jpegData.range(of: Data(bytes: [ 0xFF, marker ])) {
firstSOFRange = range
break
}
}
guard let firstSOFIndex = firstSOFRange?.lowerBound
else { fatalError("No SOF or EOI marker found.") }
// create comment byte array
let length = comment.lengthOfBytes(using: .utf8) + 2
let l1 = UInt8((length >> 8) & 0xFF)
let l2 = UInt8(length & 0xFF)
let commentArray = [ 0xFF, 0xFE /* COM marker */, l1, l2 ] + [UInt8](comment.utf8)
// insert comment array into image data object
jpegData.insert(contentsOf: commentArray, at: firstSOFIndex)
}
guard let jpegURL = Bundle.main.url(forResource: "no_com", withExtension: "jpg")
else { fatalError("File not found.") }
guard var jpegData = try? Data(contentsOf: jpegURL)
else { fatalError("File could not be read.") }
addJPEGComment(to: &jpegData, "This is a JPEG comment.")
guard let jpegOutputURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("with_com.jpg")
else { fatalError("Destination URL not created") }
try jpegData.write(to: jpegOutputURL)
print(jpegOutputURL)
評論顯示:
謝謝你的回答。它的工作方式與我相同。 –
是的,你只需要使用UserComment在屬性,你可以添加字典的屬性,而不是像'{「註釋1」:「yourcomment」,「註釋2」:「yourcomment」}只是字符串' – iphonic
@iphonic是的,我已經做到了這一點。這將在EXIF類型元數據中添加註釋,但我需要將其添加到元數據的文件類型中。請閱讀此鏈接http://s000.tinyupload.com/?file_id=00209075531742860207 –
您是否嘗試過:'let url = URL(fileURLWithPath:「myfile.jpg」) var resourceValues = URLResourceValues() // TODO:設置一些值resourceValues url.setResourceValues(resourceValues)' – Ramis