Disse hendige kommandolinjeverktøyene viser Golangs allsidighet.

Konvertering av bildeformat er avgjørende i programvareutvikling for å muliggjøre kompatibilitet og effektiv bildehåndtering på tvers av forskjellige systemer. Du kan optimalisere bildelagring, overføring, gjengivelse og manipulering ved å konvertere bilder mellom formater.

Det er mange pakker for bildeformatkonvertering i Go-økosystemet, og Golang gir en bildepakke for bildeformatering og konvertering. Bildepakken gir grunnleggende 2D-bildefunksjonalitet, inkludert funksjoner for dekoding, koding, endring av størrelse og rotering av bilder.

Komme i gang med bildepakken

Gos innebygde bildebibliotek gir omfattende funksjonalitet for arbeid med bilder i ulike formater. De bilde pakken gir støtte for lesing, skriving og manipulering av bilder.

De bilde pakken støtter flere bildefiltyper og formater, inkludert JPEG, PNG, GIF og BMP. Den lar deg lese og dekode bilder fra filer eller strømmer og kode og skrive bilder til filer eller strømmer. Dette gjør det enkelt å jobbe med ulike typer bilder i Go, uavhengig av format.

Biblioteket tilbyr også omfattende funksjonalitet for bildemanipulering og -behandling. De bilde pakken gir metoder for tilgang til individuelle piksler, og muliggjør manipulering på lavt nivå for oppgaver som å endre pikselverdier eller bruke tilpassede filtre.

I tillegg støtter pakken fargemodeller og gir verktøy for konvertering mellom forskjellige fargerepresentasjoner. Dette er nyttig for å arbeide med bilder i ulike fargerom.

Konvertering av bilder fra PNG til JPEG

PNG og JPEG er ofte brukte bildeformater, hver med distinkte egenskaper. PNG er et tapsfritt format som erstatter GIF, og støtter bilder av høy kvalitet med bevarte bildedata og gjennomsiktighet. PNG er godt egnet for bilder med skarpe kanter, tekst eller områder med jevn farge.

De bilde pakken inneholder jpeg og png pakker som du kan bruke for konvertering av bildeformater mellom de to formatene.

Du kan skrive en funksjon for å konvertere PNG-bilder til JPEG-format. Her er et eksempel som godtar bildebytedatastrøm som inngang:

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)
}

De ToJpeg funksjonen oppdager innholdstypen med http. DetectContentType funksjon. Denne funksjonen tar bildebytesnittet som input og returnerer innholdstypen som en streng.

De bytte betinget erklæring har en sak som sjekker om bildeformatet er PNG. Funksjonen dekoder bildebytesnittet hvis det er et PNG-bilde med bilde. Dekode funksjon.

Til slutt, den ToJpeg funksjonen oppretter en ny buffer og koder bildet i JPEG-format med jpeg. Kode funksjon.

Du kan laste PNG-bildet før du ringer ToJpeg med os. ReadFile funksjon:

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!")
}

De hoved- funksjonen leser PNG-bildet fra den angitte katalogen før den kaller ToJpeg funksjon. De ToJpeg funksjonen returnerer en bytebit av bildet i JPEG-format.

De hoved- funksjonen skriver JPEG-filen til den angitte banen med os. Skriv fil funksjon. Etter en vellykket konverteringsprosess, hoved- funksjonen skriver ut en melding til konsollen.

Konvertering av bilder fra JPEG til PNG

JPEG er et tapsformat optimert for komplekse fotografier. JPEG oppnår høyere komprimeringsforhold, noe som resulterer i mindre filstørrelser, om enn med et lite tap av kvalitet.

I motsetning til PNG, støtter ikke JPEG gjennomsiktighet. Den utmerker seg ved å vise fotografiske bilder med forskjellige farger og gradienter.

Her er hvordan du kan konvertere output.jpg fil til en PNG-fil med navnet input.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
}

De JpegToPng funksjonen dekoder bildebyte-stykket med jpeg. Dekode funksjon. Funksjonen oppretter en ny buffer for koding av bildet i PNG-format med png. Kode funksjon.

Her er hoved- funksjon som kaller JpegToPng funksjon:

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!")
}

De hoved- funksjonen leser JPEG-bildet fra den angitte katalogen og kaller opp JpegToPng funksjon. Denne funksjonen returnerer en byte-del av bildet i PNG-format.

Go gir de fleste funksjonene du trenger for å bygge appene dine i standardbiblioteket

Bildepakken er et av mange allsidige biblioteker i Gos økosystem. Takket være bildepakken kan du utføre bildeoppgaver uten å stole på eksterne biblioteker.

Go tilbyr også andre allsidige pakker, inkludert http-pakken for å bygge nettbaserte applikasjoner. http-pakken inneholder de fleste funksjonene du trenger for å bygge serversiden til en nettapp.