Dessa praktiska kommandoradsverktyg visar upp Golangs mångsidighet.
Konvertering av bildformat är avgörande vid mjukvaruutveckling för att möjliggöra kompatibilitet och effektiv bildhantering över olika system. Du kan optimera bildlagring, överföring, rendering och manipulation genom att konvertera bilder mellan format.
Det finns många paket för konvertering av bildformat i Go-ekosystemet, och Golang tillhandahåller ett bildpaket för bildformatering och konvertering. Bildpaketet tillhandahåller grundläggande 2D-bildfunktioner, inklusive funktioner för avkodning, kodning, storleksändring och rotering av bilder.
Komma igång med bildpaketet
Gos inbyggda bildbibliotek ger omfattande funktionalitet för att arbeta med bilder i olika format. De bild paketet ger stöd för att läsa, skriva och manipulera bilder.
De bild paketet stöder flera bildfiltyper och format, inklusive JPEG, PNG, GIF och BMP. Det låter dig läsa och avkoda bilder från filer eller strömmar och koda och skriva bilder till filer eller strömmar. Detta gör det enkelt att arbeta med olika typer av bilder i Go, oavsett format.
Biblioteket erbjuder även omfattande funktionalitet för bildmanipulation och bildbehandling. De bild paketet tillhandahåller metoder för att komma åt enskilda pixlar, vilket möjliggör manipulation på låg nivå för uppgifter som att ändra pixelvärden eller använda anpassade filter.
Dessutom stöder paketet färgmodeller och tillhandahåller verktyg för att konvertera mellan olika färgrepresentationer. Detta är praktiskt för att arbeta med bilder i olika färgrymder.
Konvertera bilder från PNG till JPEG
PNG och JPEG är vanliga bildformat, var och en med distinkta egenskaper. PNG är ett förlustfritt format som ersätter GIF och stöder bilder av hög kvalitet med bevarad bilddata och transparens. PNG lämpar sig väl för bilder med skarpa kanter, text eller områden med enhetlig färg.
De bild paketet innehåller jpeg och png paket som du kan använda för konvertering av bildformat mellan de två formaten.
Du kan skriva en funktion för att konvertera PNG-bilder till JPEG-format. Här är ett exempel som accepterar bildbytedataström som indata:
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 funktionen känner av innehållstypen med http. DetectContentType fungera. Den här funktionen tar bildbytesegmentet som indata och returnerar innehållstypen som en sträng.
De byta villkorligt uttalande har ett fall som kontrollerar om bildformatet är PNG. Funktionen avkodar bildbytesegmentet om det är en PNG-bild med bild. Avkoda fungera.
Slutligen, den ToJpeg funktionen skapar en ny buffert och kodar bilden i JPEG-format med jpeg. Koda fungera.
Du kan ladda PNG-bilden innan du anropar ToJpeg med os. Läsfil fungera:
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 huvud funktionen läser PNG-bilden från den angivna katalogen innan den anropas ToJpeg fungera. De ToJpeg funktionen returnerar en bitbyte av bilden i JPEG-format.
De huvud funktionen skriver JPEG-filen till den angivna sökvägen med os. WriteFile fungera. Efter en framgångsrik konverteringsprocess, huvud funktionen skriver ut ett meddelande till konsolen.
Konvertera bilder från JPEG till PNG
JPEG är ett förlustformat optimerat för komplexa fotografier. JPEG uppnår högre komprimeringsförhållanden, vilket resulterar i mindre filstorlekar, om än med en liten kvalitetsförlust.
Till skillnad från PNG stöder JPEG inte transparens. Det utmärker sig när det gäller att visa fotografiska bilder med olika färger och gradienter.
Så här kan du konvertera output.jpg fil till en PNG-fil med namnet 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 funktionen avkodar bildbytesegmentet med jpeg. Avkoda fungera. Funktionen skapar en ny buffert för att koda bilden i PNG-format med png. Koda fungera.
Här är huvud funktion som anropar JpegToPng fungera:
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 huvud funktionen läser JPEG-bilden från den angivna katalogen och anropar JpegToPng fungera. Den här funktionen returnerar en byte-del av bilden i PNG-format.
Go tillhandahåller de flesta funktioner du behöver för att bygga dina appar i sitt standardbibliotek
Bildpaketet är ett av många mångsidiga bibliotek i Gos ekosystem. Tack vare bildpaketet kan du utföra bilduppgifter utan att förlita dig på externa bibliotek.
Go tillhandahåller även andra mångsidiga paket, inklusive http-paketet för att bygga webbaserade applikationer. http-paketet innehåller de flesta funktioner du behöver för att bygga serversidan av en webbapp.