Nsdata e uiimage
-
05-07-2019 - |
Pergunta
Estou tentando carregar UIImage
objeto de NSData
, e o código de amostra era para NSImage
, Acho que eles deveriam ser os mesmos. Mas agora carregando a imagem, estou me perguntando o que é o melhor para solucionar o UIImage
carregando NSData
questão.
Solução
Uiimage tem um -initWithData:
método. A partir dos documentos: "Os dados no parâmetro de dados devem ser formatados para corresponder ao formato de arquivo de um dos tipos de imagem suportados do sistema".
Outras dicas
Eu não tentei UIImageJPEGRepresentation()
antes, mas UIImagePNGRepresentation
funciona bem para mim e conversão entre NSData
e UIImage
está morto simples:
NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];
Tente isso para converter uma imagem em nsdata:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
Thedata deve ser um NSData
objeto que já contém os dados. Você precisa fazer o carregamento/download de arquivos para o NSData
objeto antes de ser usado. Você pode inspecioná -lo usando NSLog
em Thedata e veja se ele contém os dados válidos.
Para execução segura do código, use o bloco if-let com dados, conforme a função uiImagePnGrepresentation retorna, valor opcional.
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Observação: Dados é a classe Swift 3. Use dados em vez de nsdata com Swift 3
Operações de imagem genérica (como PNG e JPG):
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
handleOperationWithData(data: data)
} else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}
Usando extensão:
extension UIImage {
var pngRepresentationData: Data? {
return UIImagePNGRepresentation(img)
}
var jpegRepresentationData: Data? {
return UIImageJPEGRepresentation(self, 1.0)
}
}
*******
if let img = UIImage(named: "Hello.png") {
if let data = img.pngRepresentationData {
handleOperationWithData(data: data)
} else if let data = jpegRepresentationData {
handleOperationWithData(data: data)
}
}
*******
func handleOperationWithData(data: Data) {
// Handle operations with data here...
if let image = UIImage(data: data) {
// Use image...
}
}