Tieto praktické nástroje príkazového riadku ukazujú všestrannosť Golang.

Konverzia obrazového formátu je životne dôležitá pri vývoji softvéru na umožnenie kompatibility a efektívnej manipulácie s obrázkami v rôznych systémoch. Konverziou obrázkov medzi formátmi môžete optimalizovať ukladanie, prenos, vykresľovanie a manipuláciu s obrázkami.

V ekosystéme Go existuje veľa balíkov na konverziu obrázkových formátov a Golang poskytuje balík obrázkov na formátovanie a konverziu obrázkov. Balík obrázkov poskytuje základné funkcie 2D obrazu vrátane funkcií na dekódovanie, kódovanie, zmenu veľkosti a otáčanie obrázkov.

Začíname s balíkom obrázkov

Vstavaná knižnica obrázkov Go poskytuje komplexné funkcie pre prácu s obrázkami v rôznych formátoch. The obrázok balík poskytuje podporu pre čítanie, písanie a manipuláciu s obrázkami.

The obrázok balík podporuje viacero typy obrazových súborov a formátov vrátane JPEG, PNG, GIF a BMP. Umožňuje vám čítať a dekódovať obrázky zo súborov alebo prúdov a kódovať a zapisovať obrázky do súborov alebo prúdov. To uľahčuje prácu s rôznymi typmi obrázkov v Go bez ohľadu na ich formát.

instagram viewer

Knižnica tiež ponúka rozsiahle funkcie na manipuláciu a spracovanie obrázkov. The obrázok Balík poskytuje metódy prístupu k jednotlivým pixelom, čo umožňuje nízkoúrovňovú manipuláciu pre úlohy, ako je úprava hodnôt pixelov alebo použitie vlastných filtrov.

Okrem toho balík podporuje farebné modely a poskytuje nástroje na prevod medzi rôznymi reprezentáciami farieb. To je užitočné pri práci s obrázkami v rôznych farebných priestoroch.

Prevod obrázkov z PNG do JPEG

PNG a JPEG sú bežne používané obrazové formáty, každý s odlišnými vlastnosťami. PNG je bezstratový formát, ktorý nahrádza GIF a podporuje vysokokvalitné obrázky so zachovanými obrazovými dátami a priehľadnosťou. PNG je vhodný pre obrázky s ostrými hranami, textom alebo oblasťami jednotnej farby.

The obrázok balenie obsahuje jpeg a png balíky, ktoré môžete použiť na konverziu obrazových formátov medzi týmito dvoma formátmi.

Môžete napísať funkciu na konverziu obrázkov PNG do formátu JPEG. Tu je príklad, ktorý akceptuje ako vstup dátový tok obrazových bajtov:

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

The ToJpeg funkcia zisťuje typ obsahu pomocou http. DetectContentType funkciu. Táto funkcia berie bajtový výsek obrazu ako vstup a vracia typ obsahu ako reťazec.

The prepnúť podmienený príkaz má jeden prípad, ktorý kontroluje, či je formát obrázka PNG. Funkcia dekóduje bajtový výsek obrázka, ak ide o obrázok PNG s obrázok. Dekódovať funkciu.

Nakoniec, ToJpeg vytvorí novú vyrovnávaciu pamäť a zakóduje obrázok do formátu JPEG pomocou jpeg. Zakódovať funkciu.

Môžete načítať obrázok PNG pred volaním ToJpeg pomocou os. ReadFile funkcia:

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

The Hlavná funkcia načíta obrázok PNG zo zadaného adresára pred volaním ToJpeg funkciu. The ToJpeg funkcia vráti bajtový výsek obrázka vo formáte JPEG.

The Hlavná funkcia zapíše súbor JPEG do zadanej cesty s príponou os. WriteFile funkciu. Po úspešnom procese konverzie, Hlavná funkcia vypíše správu do konzoly.

Prevod obrázkov z JPEG do PNG

JPEG je stratový formát optimalizovaný pre zložité fotografie. JPEG dosahuje vyššie kompresné pomery, výsledkom čoho sú menšie veľkosti súborov, aj keď s miernou stratou kvality.

Na rozdiel od PNG JPEG nepodporuje priehľadnosť. Vyniká zobrazovaním fotografických obrázkov s rôznymi farbami a prechodmi.

Tu je návod, ako môžete previesť výstup.jpg súbor do súboru PNG s názvom vstup.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
}

The JpegToPng funkcia dekóduje bajtový výsek obrazu pomocou jpeg. Dekódovať funkciu. Funkcia vytvorí novú vyrovnávaciu pamäť na kódovanie obrázka vo formáte PNG pomocou png. Zakódovať funkciu.

Tu je Hlavná funkciu, ktorá volá JpegToPng funkcia:

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

The Hlavná funkcia načíta obrázok JPEG zo zadaného adresára a zavolá JpegToPng funkciu. Táto funkcia vráti bajtovú časť obrázka vo formáte PNG.

Go poskytuje väčšinu funkcií, ktoré potrebujete na zostavovanie aplikácií vo svojej štandardnej knižnici

Balík obrázkov je jednou z mnohých všestranných knižníc v ekosystéme Go. Vďaka balíku obrázkov môžete vykonávať úlohy s obrázkami bez toho, aby ste sa spoliehali na externé knižnice.

Go poskytuje aj ďalšie všestranné balíky vrátane balíka http na vytváranie webových aplikácií. Balík http obsahuje väčšinu funkcií, ktoré potrebujete na vytvorenie serverovej strany webovej aplikácie.