es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Swift UIImage .jpegData() y .pngData() cambian el tamaño de la imagen.

Estoy utilizando el Marco de Visión de Swift para Aprendizaje Profundo y quiero cargar la imagen de entrada al backend utilizando una API REST, para lo cual estoy convirtiendo mi UIImage a MultipartFormData utilizando las funciones jpegData() y pngData() que Swift ofrece de forma nativa.

Uso session.sessionPreset = .vga640x480 para especificar el tamaño de la imagen en mi aplicación para el procesamiento.

Estaba viendo diferentes tamaños de imagen en el backend, lo cual pude confirmar en la aplicación porque UIImage(imageData) convertido de la imagen tiene un tamaño diferente.

Así es como convierto la imagen a multipartData

let multipartData = MultipartFormData()
if let imageData = self.image?.jpegData(compressionQuality: 1.0) {
    multipartData.append(imageData, withName: "image", fileName: "image.jpeg", mimeType: "image/jpeg")
}

Esto es lo que veo en el depurador de Xcode –

enter image description here

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema de ver diferentes tamaños de imagen en el backend puede deberse al hecho de que session.sessionPreset = .vga640x480 especifica el tamaño de la imagen para el procesamiento, pero no para la salida final. Por lo tanto, el tamaño de la imagen de salida puede diferir de la imagen de entrada.

    Para solucionar esto, primero podemos obtener el tamaño original de la UIImage utilizando image.size y luego usarlo para establecer el tamaño deseado de salida. Una forma de hacer esto es utilizando UIGraphicsImageRenderer para dibujar la imagen con el tamaño deseado y luego convertirla a jpegData() o pngData() según sea necesario. Aquí tienes un ejemplo de código para lograr esto:

    let originalSize = image.size // obtiene el tamaño original de la imagen
    let outputSize = CGSize(width: 640, height: 480) // tamaño deseado de salida
    let renderer = UIGraphicsImageRenderer(size: outputSize)
    let outputImage = renderer.image { _ in
        image.draw(in: CGRect(origin: .zero, size: outputSize))
    }
    // convierte el outputImage a jpegData() o pngData() según sea necesario
    let multipartData = MultipartFormData()
    if let imageData = outputImage.jpegData(compressionQuality: 1.0) {
        multipartData.append(imageData, withName: "image", fileName: "image.jpeg", mimeType: "image/jpeg")
    }
    

    Esto asegura que la imagen de salida tenga el tamaño deseado y coincida con la imagen de entrada para el procesamiento.

Comments are closed.