Información Sanitaria Española

Cómo convertir una imagen PNG a JPEG usando Go

Comprender los contextos en Go
Cómo convertir una imagen PNG a JPEG usando Go. Proporcionado por MUO

La conversión de formato de imagen es vital en el desarrollo de software para permitir la compatibilidad y el manejo eficiente de imágenes en diferentes sistemas. Puede optimizar el almacenamiento, la transmisión, la representación y la manipulación de imágenes convirtiendo imágenes entre formatos.

Hay muchos paquetes para la conversión de formatos de imágenes en el ecosistema Go, y Golang proporciona un paquete de imágenes para formatear y convertir imágenes. El paquete de imágenes proporciona una funcionalidad básica de imágenes 2D, incluidas funciones para decodificar, codificar, cambiar el tamaño y rotar imágenes.

Comenzando con el paquete de imágenes

La biblioteca de imágenes integrada de Go proporciona una funcionalidad integral para trabajar con imágenes en varios formatos. El paquete de imágenes proporciona soporte para leer, escribir y manipular imágenes.

El paquete de imágenes admite múltiples tipos y formatos de archivos de imágenes, incluidos JPEG, PNG, GIF y BMP. Le permite leer y decodificar imágenes de archivos o secuencias y codificar y escribir imágenes en archivos o secuencias. Esto facilita trabajar con diferentes tipos de imágenes en Go, independientemente de su formato.

La biblioteca también ofrece una amplia funcionalidad para la manipulación y el procesamiento de imágenes. El paquete de imágenes proporciona métodos para acceder a píxeles individuales, lo que permite una manipulación de bajo nivel para tareas como modificar valores de píxeles o aplicar filtros personalizados.

Además, el paquete admite modelos de color y proporciona herramientas para convertir entre diferentes representaciones de color. Esto resulta útil para trabajar con imágenes en varios espacios de color.

Convertir imágenes de PNG a JPEG

PNG y JPEG son formatos de imagen de uso común, cada uno con características distintas. PNG es un formato sin pérdidas que reemplaza al GIF y admite imágenes de alta calidad con transparencia y datos de imagen conservados. PNG es muy adecuado para imágenes con bordes nítidos, texto o áreas de color uniforme.

El paquete de imágenes contiene paquetesjpeg y png que puede utilizar para la conversión de formatos de imagen entre los dos formatos.

Puede escribir una función para convertir imágenes PNG al formato JPEG. A continuación se muestra un ejemplo que acepta un flujo de datos de bytes de imagen como entrada:

paquete principal

importar(

"bytes"

"fmt"

"imagen/jpeg"

"imagen/png"

"registro"

"red/http"

"os"

)

// ToJpeg convierte una imagen PNG al formato JPEG

funcToJpeg(imageBytes []byte)([]byte, error){

// DetectContentType detecta el tipo de contenido

tipo de contenido: = http.DetectContentType (imageBytes)

cambiar tipo de contenido {

caso"imagen/png":

// Decodifica los bytes de la imagen PNG

img, err := png.Decode(bytes.NewReader(imageBytes))

iferr != nulo{

regresar, errar

}

buf := nuevo(bytes.Buffer)

// codifica la imagen como un archivo JPEG

iferr := jpeg.Encode(buf, img, nil); errar != nulo{

regresar, errar

}

returnbuf.Bytes(), nulo

}

returnnil, fmt.Errorf("no se puede convertir %#v a jpeg", contentType)

}

La función ToJpeg detecta el tipo de contenido con la función http.DetectContentType . Esta función toma el segmento de bytes de la imagen como entrada y devuelve el tipo de contenido como una cadena.

La declaración condicional de cambio tiene un caso que verifica si el formato de la imagen es PNG. La función decodifica el segmento de bytes de la imagen si es una imagen PNG con la función image.Decode .

Finalmente, la función ToJpeg crea un nuevo búfer y codifica la imagen en formato JPEG con la función jpeg.Encode .

Puede cargar la imagen PNG antes de llamar a ToJpeg con la función os.ReadFile :

funcmain(){

// Lee el archivo de imagen PNG

// Reemplazar con la ruta real a tu imagen PNG

rutaimagen := "imagen.png"

imageBytes, err := os.ReadFile(imagePath)

iferr != nulo{

log.Fatalf("Error al leer el archivo de imagen: %s", err)

}

//Convierte la imagen PNG a JPEG

jpegBytes, err := ToJpeg(imageBytes)

iferr != nulo{

log.Fatalf("Error al convertir la imagen: %s", err)

}

//---- Escribimos los bytes JPEG en un archivo ----------

// Reemplazar con la ruta deseada para el archivo JPEG de salida

jpegPath := "salida.jpg"

err = os.WriteFile(jpegPath, jpegBytes, os.ModePerm)

iferr != nulo{

log.Fatalf("Error al escribir el archivo JPEG: %s", err)

}

fmt.Println("¡Conversión de imagen exitosa!")

}

La función principal lee la imagen PNG del directorio especificado antes de llamar a la función ToJpeg . La función ToJpeg devuelve una porción de bytes de la imagen en formato JPEG.

La función principal escribe el archivo JPEG en la ruta especificada con la función os.WriteFile . Después de un proceso de conversión exitoso, la función principal imprime un mensaje en la consola.

Conversión de imágenes de JPEG a PNG

JPEG es un formato con pérdida optimizado para fotografías complejas. JPEG logra relaciones de compresión más altas, lo que da como resultado archivos de menor tamaño, aunque con una ligera pérdida de calidad.

A diferencia de PNG, JPEG no admite transparencia. Destaca por mostrar imágenes fotográficas con varios colores y degradados.

Así es como puedes convertir el archivo output.jpg a un archivo PNG llamado input.png :

importar(

"bytes"

"fmt"

"imagen/jpeg"

"imagen/png"

"registro"

"os"

)

// JpegToPng convierte una imagen JPEG a formato PNG

funcJpegToPng(imageBytes []byte)([]byte, error){

img, err := jpeg.Decode(bytes.NewReader(imageBytes))

iferr != nulo{

regresar, errar

}

buf := nuevo(bytes.Buffer)

iferr := png.Encode(buf, img); errar != nulo{

regresar, errar

}

returnbuf.Bytes(), nulo

}

La función JpegToPng decodifica el segmento de bytes de la imagen con la función jpeg.Decode . La función crea un nuevo búfer para codificar la imagen en formato PNG con la función png.Encode .

Aquí está la función principal que llama a la función JpegToPng :

funcmain(){

// Lee el archivo de imagen JPEG

// Reemplazar con la ruta real a tu imagen JPG

imagePath := "salida.jpg"

imageBytes, err := os.ReadFile(imagePath)

iferr != nulo{

log.Fatalf("Error al leer el archivo de imagen: %s", err)

}

//Convierte la imagen JPEG a PNG

pngBytes, error := JpegToPng(imageBytes)

iferr != nulo{

log.Fatalf("Error al convertir la imagen: %s", err)

}

// Escribe los bytes PNG en un archivo.

// Reemplazar con la ruta deseada para el archivo JPEG de salida

pngRuta:= "entrada.png"

err = os.WriteFile(pngPath, pngBytes, os.ModePerm)

iferr != nulo{

log.Fatalf("Error al escribir el archivo PNG: %s", err)

}

fmt.Println("¡Conversión de imagen exitosa!")

}

La función principal lee la imagen JPEG del directorio especificado y llama a la función JpegToPng . Esta función devuelve una porción de bytes de la imagen en formato PNG.

Go proporciona la mayoría de las funciones que necesita para crear sus aplicaciones en su biblioteca estándar

El paquete de imágenes es una de las muchas bibliotecas versátiles del ecosistema de Go. Gracias al paquete de imágenes, puede realizar tareas de imágenes sin depender de bibliotecas externas.

Go también proporciona otros paquetes versátiles, incluido el paquete http para crear aplicaciones basadas en web. El paquete http contiene la mayoría de las funciones necesarias para crear el lado del servidor de una aplicación web.

Preguntas más frecuentes

P: ¿Qué otras opciones tengo para convertir archivos PNG a JPEG?

Crear esta herramienta es un ejercicio de programación útil, pero existen mejores formas de convertir imágenes. Por ejemplo, puede utilizar varias utilidades de Windows para convertir un PNG a JPEG.

P: ¿Go ofrece otras formas de trabajar con archivos?

El paquete del sistema operativo de Go contiene una funcionalidad básica de manejo de archivos. Combina bien con el paquete filepath que maneja nombres de archivos y rutas.

Hay muchas fuentes en línea de imágenes de archivo gratuitas que constituyen excelentes datos de muestra.