이미지 파일 헤더에 주석을 추가하고 싶습니다. UserComment에서 EXIF 메타 데이터에 주석을 추가 할 수 있었지만 이미지 파일 헤더에 여러 개의 주석을 추가하려고합니다.이미지 파일 헤더에 덧글 추가
어떤 프레임 워크를 사용합니까? UserComment의 경우 ImageIO 프레임 워크를 사용하고 있습니다.
이미지 파일 헤더에 주석을 추가하고 싶습니다. UserComment에서 EXIF 메타 데이터에 주석을 추가 할 수 있었지만 이미지 파일 헤더에 여러 개의 주석을 추가하려고합니다.이미지 파일 헤더에 덧글 추가
어떤 프레임 워크를 사용합니까? UserComment의 경우 ImageIO 프레임 워크를 사용하고 있습니다.
Swift에서 JPEG 이미지에 댓글 (예 : 이 아닌 EXIF 사용자 댓글)을 추가하는 방법은 다음과 같습니다. 나는 그것이 ImageIO 프레임 워크를 사용하여 수행 할 수 있다고 생각하지 않습니다.
이 코드는 C로 작성된 wrjpgcom
명령 줄 도구에서 가져온 것입니다. libjpeg 라이브러리의 일부입니다. 더 자세한 설명은 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)
(Gist) 출력 JPEG는 this 웹 사이트에 업로드 할 때
코멘트가 표시됩니다 :
답변 해 주셔서 감사합니다. 그것은 내가 양상으로 일하고 있습니다. –
예 만 USERCOMMENT 속성을 사용합니다, 당신은 추가 할 수 있습니다 사전에 '{ "comment1": "yourcomment", "comment2": "yourcomment"}' – iphonic
@iphonic과 같은 문자열 대신 사전에 추가 할 수 있습니다. 이렇게하면 EXIF 형식 메타 데이터에 주석이 추가되지만 메타 데이터 파일 형식에 추가해야합니다. 이 링크를 읽으십시오. http://s000.tinyupload.com/?file_id=00209075531742860207 –
다음을 시도해보십시오 :'let url = URL (fileURLWithPath : "myfile.jpg") var resourceValues = URLResourceValues () // TODO : some values to resourceValues url.setResourceValues (resourceValues) ' – Ramis