Swift - Dados da imagem do código QR da CIImage / Como renderizar saída CIFilter
Estou com esse problema há algum tempo e olhei para dezenas de respostas aqui e parece que não consigo encontrar nada que ajude.
CenárioEstou gerando um QR Code no lado iOS do meu aplicativo e quero que esse código QR seja enviado para a extensão WatchKit que estou desenvolvendo no momento.
Como eu estou gerando o QR Codefunc 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);
}
}
}
O que eu quero a seguirDesejo obter os dados da imagem QR para poder enviá-los ao aplicativo Apple Watch, da seguinte forma:
let data = UIImagePNGRepresentation(QRCodeImage);
Mas, Isso sempre retornanil
porque não há dados de imagem que apóiam a saída do filtro.
Nota: Eu sei que não há dados associados à imagem do IC porque ela não foi renderizada e nem tem dados associados a ela, porque é apenas a saída do filtro.Não sei como contornar isso porque eu sou muito novo no processamento de imagens e tal. : /
O que eu tenteiCriando umcgImage
defilter.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)
}
}
}
}
Mas isso não funciona, não parece, porque a imagem na exibição está em branco.
Criando uma CIImage em branco como imagem 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!))
}
}
}
}
Isso também não funciona - meu pensamento era adicionar uma imagem em branco a ela e depois fazer o filtro em cima dela, mas provavelmente não estou fazendo isso corretamente.
Meu golLiteralmente, só paraobtenha os dados do QR Code gerado. A maioria dos tópicos sugereUIImage(ciImage: output)
, mas isso não possui dados de backup.
Se alguém pudesse me ajudar com isso, seria ótimo. E qualquer explicação sobre como funciona também seria maravilhosa.
Editar: Não acredito que seja o mesmo que a duplicata marcada - A duplicata marcada é sobre a edição de uma imagem existente usando filtros de IC e a obtenção desses dados, e trata-se de uma imagem criada exclusivamente através do filtro de CI sem imagem de entrada - QR Codes . a outra resposta não estava totalmente relacionada.