Deze handige opdrachtregeltools laten de veelzijdigheid van Golang zien.
Het converteren van beeldformaten is van vitaal belang bij de ontwikkeling van software om compatibiliteit en efficiënte beeldverwerking tussen verschillende systemen mogelijk te maken. U kunt de opslag, verzending, weergave en manipulatie van afbeeldingen optimaliseren door afbeeldingen tussen indelingen te converteren.
Er zijn veel pakketten voor het converteren van afbeeldingsindelingen in het Go-ecosysteem en Golang biedt een afbeeldingspakket voor het opmaken en converteren van afbeeldingen. Het afbeeldingspakket biedt basisfunctionaliteit voor 2D-afbeeldingen, inclusief functies voor het decoderen, coderen, vergroten of verkleinen en roteren van afbeeldingen.
Aan de slag met het beeldpakket
Go's ingebouwde afbeeldingenbibliotheek biedt uitgebreide functionaliteit voor het werken met afbeeldingen in verschillende formaten. De afbeelding pakket biedt ondersteuning voor het lezen, schrijven en manipuleren van afbeeldingen.
De afbeelding pakket ondersteunt meerdere typen afbeeldingsbestanden en formaten, waaronder JPEG, PNG, GIF en BMP. Hiermee kunt u afbeeldingen van bestanden of streams lezen en decoderen en afbeeldingen naar bestanden of streams coderen en schrijven. Dit maakt het gemakkelijk om in Go met verschillende soorten afbeeldingen te werken, ongeacht hun formaat.
De bibliotheek biedt ook uitgebreide functionaliteit voor beeldmanipulatie en -verwerking. De afbeelding pakket biedt methoden voor toegang tot individuele pixels, waardoor manipulatie op laag niveau mogelijk is voor taken zoals het wijzigen van pixelwaarden of het toepassen van aangepaste filters.
Bovendien ondersteunt het pakket kleurmodellen en biedt het tools voor het converteren tussen verschillende kleurweergaven. Dit is handig voor het werken met afbeeldingen in verschillende kleurruimten.
Afbeeldingen converteren van PNG naar JPEG
PNG en JPEG zijn veelgebruikte afbeeldingsindelingen, elk met verschillende kenmerken. PNG is een indeling zonder verlies die GIF vervangt en ondersteunt afbeeldingen van hoge kwaliteit met bewaarde afbeeldingsgegevens en transparantie. PNG is zeer geschikt voor afbeeldingen met scherpe randen, tekst of gebieden met een uniforme kleur.
De afbeelding pakket bevat jpeg En png pakketten die u kunt gebruiken voor conversie van afbeeldingsindelingen tussen de twee indelingen.
U kunt een functie schrijven om PNG-afbeeldingen naar het JPEG-formaat te converteren. Hier is een voorbeeld dat een afbeeldingsbyte-gegevensstroom als invoer accepteert:
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 naarJpeg functie detecteert het inhoudstype met de http. Detecteer inhoudstype functie. Deze functie neemt het byte-segment van de afbeelding als invoer en retourneert het inhoudstype als een tekenreeks.
De voorwaardelijke verklaring wisselen heeft één geval dat controleert of het afbeeldingsformaat PNG is. De functie decodeert het byte-segment van de afbeelding als het een PNG-afbeelding is met de afbeelding. Decoderen functie.
eindelijk, de naarJpeg functie creëert een nieuwe buffer en codeert de afbeelding in JPEG-indeling met de jpeg. Coderen functie.
U kunt de PNG-afbeelding laden voordat u ToJpeg aanroept met de os. LeesBestand functie:
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 voornaamst functie leest de PNG-afbeelding uit de opgegeven map voordat de naarJpeg functie. De naarJpeg functie retourneert een bytesegment van de afbeelding in JPEG-indeling.
De voornaamst functie schrijft het JPEG-bestand naar het opgegeven pad met de os. SchrijfBestand functie. Na een succesvol conversieproces is de voornaamst functie drukt een bericht af naar de console.
Afbeeldingen converteren van JPEG naar PNG
JPEG is een formaat met verlies dat is geoptimaliseerd voor complexe foto's. JPEG bereikt hogere compressieverhoudingen, wat resulteert in kleinere bestandsgroottes, zij het met een klein kwaliteitsverlies.
In tegenstelling tot PNG ondersteunt JPEG geen transparantie. Het blinkt uit in het weergeven van fotografische afbeeldingen met verschillende kleuren en verlopen.
Hier leest u hoe u de uitvoer.jpg bestand naar een PNG-bestand met de naam invoer.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 functie decodeert de afbeeldingsbyte slice met de jpeg. Decoderen functie. De functie maakt een nieuwe buffer aan voor het coderen van de afbeelding in PNG-indeling met de png. Coderen functie.
Hier is de voornaamst functie die de aanroept JpegToPng functie:
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 voornaamst functie leest de JPEG-afbeelding uit de opgegeven map en roept de JpegToPng functie. Deze functie retourneert een bytesegment van de afbeelding in PNG-indeling.
Go biedt de meeste functies die u nodig hebt om uw apps te bouwen in de standaardbibliotheek
Het afbeeldingspakket is een van de vele veelzijdige bibliotheken in het ecosysteem van Go. Dankzij het afbeeldingspakket kunt u afbeeldingstaken uitvoeren zonder afhankelijk te zijn van externe bibliotheken.
Go biedt ook andere veelzijdige pakketten, waaronder het http-pakket voor het bouwen van webgebaseerde applicaties. Het http-pakket bevat de meeste functies die u nodig hebt om de serverkant van een webapp te bouwen.