Tyto šikovné nástroje příkazového řádku předvádějí všestrannost Golang.

Konverze obrazového formátu je zásadní při vývoji softwaru pro umožnění kompatibility a efektivní manipulace s obrázky napříč různými systémy. Převáděním obrázků mezi formáty můžete optimalizovat ukládání, přenos, vykreslování a manipulaci s obrázky.

V ekosystému Go existuje mnoho balíčků pro převod formátu obrázků a Golang poskytuje balíček obrázků pro formátování a převod obrázků. Balíček obrázků poskytuje základní funkce 2D obrazu, včetně funkcí pro dekódování, kódování, změnu velikosti a otáčení obrázků.

Začínáme s balíčkem Image Package

Vestavěná knihovna obrázků Go poskytuje komplexní funkce pro práci s obrázky v různých formátech. The obraz balíček poskytuje podporu pro čtení, zápis a manipulaci s obrázky.

The obraz balíček podporuje více typy obrazových souborů a formáty, včetně JPEG, PNG, GIF a BMP. Umožňuje číst a dekódovat obrázky ze souborů nebo proudů a kódovat a zapisovat obrázky do souborů nebo proudů. To usnadňuje práci s různými typy obrázků v Go bez ohledu na jejich formát.

instagram viewer

Knihovna také nabízí rozsáhlé funkce pro manipulaci a zpracování obrázků. The obraz balíček poskytuje metody pro přístup k jednotlivým pixelům, což umožňuje nízkoúrovňovou manipulaci pro úkoly, jako je úprava hodnot pixelů nebo použití vlastních filtrů.

Balíček navíc podporuje barevné modely a poskytuje nástroje pro převod mezi různými reprezentacemi barev. To je užitečné pro práci s obrázky v různých barevných prostorech.

Převod obrázků z PNG do JPEG

PNG a JPEG jsou běžně používané obrazové formáty, každý s odlišnými vlastnostmi. PNG je bezztrátový formát, který nahrazuje GIF a podporuje vysoce kvalitní obrázky se zachovanými obrazovými daty a průhledností. PNG se dobře hodí pro obrázky s ostrými hranami, textem nebo oblastmi jednotné barvy.

The obraz Balíček obsahuje jpeg a png balíčky, které můžete použít pro konverzi obrazových formátů mezi těmito dvěma formáty.

Můžete napsat funkci pro převod obrázků PNG do formátu JPEG. Zde je příklad, který akceptuje datový tok bajtů obrázku jako vstup:

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 funkce detekuje typ obsahu pomocí http. DetectContentType funkce. Tato funkce bere jako vstup bajtový řez obrázku a vrací typ obsahu jako řetězec.

The podmíněný příkaz switch má jeden případ, který kontroluje, zda je formát obrázku PNG. Funkce dekóduje bajtový řez obrázku, pokud se jedná o obrázek PNG s obraz. Dekódovat funkce.

Konečně, ToJpeg vytvoří novou vyrovnávací paměť a zakóduje obrázek do formátu JPEG pomocí jpeg. Zakódovat funkce.

Můžete načíst obrázek PNG před voláním ToJpeg pomocí os. ReadFile funkce:

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í funkce čte obrázek PNG ze zadaného adresáře před voláním ToJpeg funkce. The ToJpeg Funkce vrací bajtový výsek obrázku ve formátu JPEG.

The hlavní funkce zapíše soubor JPEG do zadané cesty s příponou os. WriteFile funkce. Po úspěšném procesu konverze, hlavní funkce vytiskne zprávu do konzole.

Převod obrázků z JPEG do PNG

JPEG je ztrátový formát optimalizovaný pro složité fotografie. JPEG dosahuje vyšších kompresních poměrů, což má za následek menší velikosti souborů, i když s mírnou ztrátou kvality.

Na rozdíl od PNG nepodporuje JPEG průhlednost. Vyniká zobrazováním fotografických obrázků s různými barvami a přechody.

Zde je návod, jak můžete převést výstup.jpg soubor do souboru PNG s názvem 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 funkce dekóduje bajtový řez obrazu pomocí jpeg. Dekódovat funkce. Funkce vytvoří nový buffer pro kódování obrázku ve formátu PNG pomocí png. Zakódovat funkce.

Zde je hlavní funkce, která volá JpegToPng funkce:

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í funkce načte obrázek JPEG ze zadaného adresáře a zavolá JpegToPng funkce. Tato funkce vrací bajtový řez obrázku ve formátu PNG.

Go poskytuje většinu funkcí, které potřebujete k vytváření aplikací, ve své standardní knihovně

Balíček obrázků je jednou z mnoha univerzálních knihoven v ekosystému Go. Díky balíku obrázků můžete provádět úlohy s obrázky, aniž byste se spoléhali na externí knihovny.

Go také poskytuje další všestranné balíčky, včetně balíčku http pro vytváření webových aplikací. Balíček http obsahuje většinu funkcí, které potřebujete k sestavení serverové strany webové aplikace.