Swift - Datos de imagen del código QR de CIImage / Cómo representar la salida de CIFilter
He estado teniendo este problema por un tiempo y miré docenas de respuestas aquí y parece que no puedo encontrar nada que ayude.
GuióEstoy generando un código QR en el lado de iOS de mi aplicación y quiero que este código QR se envíe a la extensión WatchKit que estoy desarrollando actualmente.
Cómo estoy generando el código QRfunc createQR(with string: String) {
if let filter = CIFilter(name: "CIQRCodeGenerator") {
//set the data to the contact data
filter.setValue(string, forKey: "inputMessage")
filter.setValue("L", forKey: "inputCorrectionLevel")
if let codeImage = filter.outputImage {
return UIImage(ciImage: codeImage);
}
}
}
Lo que quiero a continuaciónQuiero obtener los datos de la imagen QR para poder enviarlos a la aplicación Apple Watch, así:
let data = UIImagePNGRepresentation(QRCodeImage);
Pero Esto siempre devuelvenil
porque no hay datos de imagen que respalden la salida del filtro.
Nota Sé que no hay datos asociados con la imagen CI porque no se ha procesado y ni siquiera tiene datos asociados porque es solo la salida del filtro. @ No sé cómo evitar esto porque soy bastante nuevo en el procesamiento de imágenes y demás. : /
Lo que he probadoCreando uncgImage
desde elfilter.outputImage
func createQR(with string: String) {
if let filter = CIFilter(name: "CIQRCodeGenerator") {
//set the data to the contact data
filter.setValue(contactData, forKey: "inputMessage")
filter.setValue("L", forKey: "inputCorrectionLevel")
if let codeImage = filter.outputImage {
let context = CIContext(options: nil)
if let cgImage = context.createCGImage(codeImage, from: codeImage.extent) {
self.QRCode = UIImage(cgImage: cgImage)
}
}
}
}
Pero esto no funciona, no parece, porque la imagen en la vista está en blanco.
Creando un CIImage en blanco como imagen de entradafunc update(with string: String) {
let blankCiImage = CIImage(color: .white) //This probably isn't right...
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(contactData, forKey: "inputMessage")
filter.setValue("L", forKey: "inputCorrectionLevel")
filter.setValue(blankCiImage, forKey: kCIInputImageKey)
if let codeImage = filter.outputImage {
let context = CIContext(options: nil)
if let cgImage = context.createCGImage(codeImage, from: codeImage.extent) {
self.contactCode = UIImage(cgImage: cgImage)
print(self.contactCode!)
print(UIImagePNGRepresentation(self.contactCode!))
}
}
}
}
Esto tampoco funciona: pensé en agregarle una imagen en blanco y luego hacer el filtro encima, pero probablemente no lo estoy haciendo bien.
Mi metLiteralmente solo para obtenga los datos del código QR generado. La mayoría de los hilos sugierenUIImage(ciImage: output)
, pero esto no tiene ningún dato de respaldo.
Si alguien pudiera ayudarme con esto, sería genial. Y cualquier explicación sobre cómo funciona también sería maravillosa.
Editar No creo que sea lo mismo que el duplicado marcado: el duplicado marcado se trata de editar una imagen existente utilizando filtros CI y obtener esos datos, y se trata de una imagen que se crea únicamente a través del filtro CI sin imagen de entrada: QR Códigos la otra respuesta no se relacionaba completamente.