Estas útiles herramientas de línea de comandos muestran la versatilidad de Golang.

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 formato de imagen en el ecosistema de Go, y Golang proporciona un paquete de imagen para formatear y convertir imágenes. El paquete de imágenes proporciona funciones básicas de imágenes en 2D, incluidas funciones para decodificar, codificar, cambiar el tamaño y rotar imágenes.

Primeros pasos 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 imagen El paquete proporciona soporte para leer, escribir y manipular imágenes.

El imagen el paquete admite múltiples tipos de archivos de imagen

instagram viewer
y formatos, 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 el trabajo 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 imagen El paquete proporciona métodos para acceder a píxeles individuales, lo que permite la manipulación de bajo nivel para tareas como la modificación de valores de píxeles o la aplicación de filtros personalizados.

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

Conversión de 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 a GIF y admite imágenes de alta calidad con datos de imagen preservados y transparencia. PNG es adecuado para imágenes con bordes nítidos, texto o áreas de color uniforme.

El imagen el paquete contiene jpeg y png paquetes que puede usar para la conversión de formato de imagen entre los dos formatos.

Puede escribir una función para convertir imágenes PNG al formato JPEG. Aquí hay un ejemplo que acepta el flujo de datos de bytes de imagen como entrada:

package main

import (
"bytes"
"fmt"
"image/jpeg"
"image/png"
"log"
"net/http"
"os"
)

// ToJpeg converts a PNG image to JPEG format
funcToJpeg(imageBytes []byte)([]byte, error) {

// DetectContentType detects the content type
contentType := http.DetectContentType(imageBytes)

switch contentType {
case"image/png":
// Decode the PNG image bytes
img, err := png.Decode(bytes.NewReader(imageBytes))

if err != nil {
returnnil, err
}

buf := new(bytes.Buffer)

// encode the image as a JPEG file
if err := jpeg.Encode(buf, img, nil); err != nil {
returnnil, err
}

return buf.Bytes(), nil
}

returnnil, fmt.Errorf("unable to convert %#v to jpeg", contentType)
}

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

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

Finalmente, el ParaJpeg La función crea un nuevo búfer y codifica la imagen en formato JPEG con el jpeg. Codificar función.

Puede cargar la imagen PNG antes de llamar a ToJpeg con el so. Leer archivo función:

funcmain() {
// Read the PNG image file

// Replace with the actual path to your PNG image
imagePath := "image.png"
imageBytes, err := os.ReadFile(imagePath)

if err != nil {
log.Fatalf("Failed to read image file: %s", err)
}

// Convert the PNG image to JPEG
jpegBytes, err := ToJpeg(imageBytes)

if err != nil {
log.Fatalf("Failed to convert image: %s", err)
}

// Write the JPEG bytes to a file

// Replace with the desired path for the output JPEG file
jpegPath := " output.jpg"
err = os.WriteFile(jpegPath, jpegBytes, os.ModePerm)

if err != nil {
log.Fatalf("Failed to write JPEG file: %s", err)
}

fmt.Println("Image conversion successful!")
}

El principal La función lee la imagen PNG del directorio especificado antes de llamar al ParaJpeg función. El ParaJpeg La función devuelve un segmento de bytes de la imagen en formato JPEG.

El principal La función escribe el archivo JPEG en la ruta especificada con el so. Escribir archivo función. Después de un proceso de conversión exitoso, el principal La función imprime un mensaje a 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 tamaños de archivo más pequeños, aunque con una ligera pérdida de calidad.

A diferencia de PNG, JPEG no admite transparencia. Sobresale en la visualización de imágenes fotográficas con varios colores y degradados.

Así es como puede convertir el salida.jpg archivo a un archivo PNG llamado entrada.png:

import (
"bytes"
"fmt"
"image/jpeg"
"image/png"
"log"
"os"
)

// JpegToPng converts a JPEG image to PNG format
funcJpegToPng(imageBytes []byte)([]byte, error) {
img, err := jpeg.Decode(bytes.NewReader(imageBytes))

if err != nil {
returnnil, err
}

buf := new(bytes.Buffer)

if err := png.Encode(buf, img); err != nil {
returnnil, err
}

return buf.Bytes(), nil
}

El jpegtopng La función decodifica el segmento de bytes de la imagen con el jpeg. Descodificar función. La función crea un nuevo búfer para codificar la imagen en formato PNG con el png. Codificar función.

Aquí esta la principal función que llama al jpegtopng función:

funcmain() {
// Read the JPEG image file

// Replace with the actual path to your JPG image
imagePath := "output.jpg"
imageBytes, err := os.ReadFile(imagePath)

if err != nil {
log.Fatalf("Failed to read image file: %s", err)
}

// Convert the JPEG image to PNG
pngBytes, err := JpegToPng(imageBytes)

if err != nil {
log.Fatalf("Failed to convert image: %s", err)
}

// Write the PNG bytes to a file

// Replace with the desired path for the output JPEG file
pngPath := " input.png"
err = os.WriteFile(pngPath, pngBytes, os.ModePerm)

if err != nil {
log.Fatalf("Failed to write PNG file: %s", err)
}

fmt.Println("Image conversion successful!")
}

El principal función lee la imagen JPEG del directorio especificado y llama al jpegtopng función. Esta función devuelve un segmento 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 que necesita para crear el lado del servidor de una aplicación web.