ios - para - Añadir comentario en el encabezado del archivo de imagen
insertar imagen en encabezado excel 2013 (1)
Quiero agregar un comentario (s) en el encabezado del archivo de imagen. Como puedo agregar un comentario sobre los metadatos EXIF en UserComment, pero quiero agregar varios comentarios en el encabezado del archivo de imagen.
¿Qué marco uso? Para UserComment, estoy usando el framework ImageIO.
Aquí se explica cómo agregar un comentario (es decir, no es un comentario de usuario EXIF) a una imagen JPEG en Swift. No creo que se pueda hacer usando el marco de ImageIO.
El código proviene de la herramienta de línea de comandos wrjpgcom
, escrita en C. Es parte de la biblioteca libjpeg. Verifique el código fuente para obtener comentarios más detallados (en realidad no usa libjpeg).
Insertaremos el nuevo marcador de comentario justo antes de SOFn. Esto ( a ) hace que el nuevo comentario aparezca después, en lugar de antes, de los comentarios existentes; y ( b ) garantiza que los comentarios se presenten después de cualquier marcador JFIF o JFXX, según lo exija la especificación JFIF.
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 )
El comentario se muestra cuando la salida JPEG se carga en este sitio web: