Ինչպես փոխարկել PNG պատկերը JPEG-ի, օգտագործելով Go


Այս հարմար հրամանի տող գործիքները ցույց են տալիս Golang-ի բազմակողմանիությունը:

Պատկերի ձևաչափի փոխարկումը կենսական նշանակություն ունի ծրագրային ապահովման մշակման համար՝ տարբեր համակարգերում համատեղելիության և պատկերի արդյունավետ մշակման համար: Դուք կարող եք օպտիմիզացնել պատկերների պահպանումը, փոխանցումը, մատուցումը և մանիպուլյացիան՝ պատկերները փոխակերպելով ձևաչափերի միջև:

Go-ի էկոհամակարգում կան բազմաթիվ փաթեթներ պատկերի ձևաչափի փոխակերպման համար, և Golang-ը պատկերի փաթեթ է տրամադրում պատկերների ձևաչափման և փոխակերպման համար: Պատկերների փաթեթն ապահովում է 2D պատկերի հիմնական գործառույթները, ներառյալ պատկերների վերծանման, կոդավորման, չափափոխման և պտտման հնարավորությունները:

Ինչպես սկսել Image Package-ից

Go-ի ներկառուցված պատկերադարանն ապահովում է տարբեր ձևաչափերով պատկերների հետ աշխատելու համապարփակ գործառույթ: image փաթեթը ապահովում է պատկերներ կարդալու, գրելու և շահարկելու աջակցություն:

image փաթեթն աջակցում է բազմաթիվ պատկերային ֆայլերի տեսակների և ձևաչափերի, ներառյալ JPEG, PNG, GIF և BMP: Այն թույլ է տալիս կարդալ և վերծանել պատկերները ֆայլերից կամ հոսքերից և կոդավորել և գրել պատկերներ ֆայլերում կամ հոսքերում: Սա հեշտացնում է Go-ում տարբեր տեսակի պատկերների հետ աշխատելը՝ անկախ դրանց ձևաչափից:

Գրադարանը նաև առաջարկում է պատկերի մանիպուլյացիայի և մշակման լայն հնարավորություններ: image փաթեթը տրամադրում է առանձին պիքսելներ մուտք գործելու մեթոդներ՝ թույլ տալով ցածր մակարդակի մանիպուլյացիա այնպիսի առաջադրանքների համար, ինչպիսիք են պիքսելների արժեքները փոփոխելը կամ հատուկ զտիչների կիրառումը:

Բացի այդ, փաթեթն աջակցում է գունային մոդելներին և ապահովում է տարբեր գունային պատկերների միջև փոխակերպման գործիքներ: Սա հարմար է տարբեր գունային տարածություններում պատկերների հետ աշխատելու համար:

Պատկերների փոխակերպում PNG-ից JPEG-ի

PNG-ը և JPEG-ը սովորաբար օգտագործվում են պատկերի ձևաչափեր, որոնցից յուրաքանչյուրն ունի տարբեր բնութագրեր: PNG-ն անկորուստ ձևաչափ է, որը փոխարինում է GIF-ին, որն ապահովում է բարձրորակ պատկերներ՝ պահպանված պատկերի տվյալների և թափանցիկությամբ: PNG-ը հարմար է սուր եզրերով, տեքստով կամ միատեսակ գույներով պատկերների համար:

image փաթեթը պարունակում է jpeg և png փաթեթներ, որոնք կարող եք օգտագործել երկու ձևաչափերի միջև պատկերի ձևաչափի փոխակերպման համար:

Դուք կարող եք գրել ֆունկցիա՝ PNG պատկերները JPEG ձևաչափի փոխակերպելու համար: Ահա մի օրինակ, որն ընդունում է պատկերի բայթ տվյալների հոսքը որպես մուտքագրում.

package main
import (
    "bytes"
    "fmt"
    "image/jpeg"
    "image/png"
    "log"
    "net/http"
    "os"
)
// ToJpeg converts a PNG image to JPEG format
func ToJpeg(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 {
            return nil, err
        }
        
        buf := new(bytes.Buffer)
        // encode the image as a JPEG file
        if err := jpeg.Encode(buf, img, nil); err != nil {
            return nil, err
        }
        return buf.Bytes(), nil
    }
    return nil, fmt.Errorf("unable to convert %#v to jpeg", contentType)
}

ToJpeg ֆունկցիան հայտնաբերում է բովանդակության տեսակը http.DetectContentType ֆունկցիայի միջոցով: Այս ֆունկցիան վերցնում է պատկերի բայթի հատվածը որպես մուտքագրում և վերադարձնում բովանդակության տեսակը որպես տող:

Անջատիչի պայմանական հայտարարությունն ունի մեկ դեպք, որը ստուգում է, թե արդյոք պատկերի ձևաչափը PNG է: Ֆունկցիան վերծանում է պատկերի բայթի հատվածը, եթե այն PNG պատկեր է՝ image.Decode ֆունկցիայով:

Վերջապես, ToJpeg ֆունկցիան ստեղծում է նոր բուֆեր և կոդավորում է պատկերը JPEG ձևաչափով jpeg.Encode ֆունկցիայի միջոցով:

Դուք կարող եք բեռնել PNG պատկերը ToJpeg-ին զանգահարելուց առաջ os.ReadFile ֆունկցիայի միջոցով.

func main() {
    // 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!")
}

հիմնական ֆունկցիան կարդում է PNG պատկերը նշված գրացուցակից՝ նախքան ToJpeg ֆունկցիան կանչելը: ToJpeg ֆունկցիան վերադարձնում է պատկերի բայթ հատվածը JPEG ձևաչափով:

հիմնական ֆունկցիան գրում է JPEG ֆայլը նշված ուղու վրա os.WriteFile ֆունկցիայով: Փոխակերպման հաջող գործընթացից հետո հիմնական ֆունկցիան հաղորդագրություն է տպում վահանակին:

Պատկերների փոխակերպում JPEG-ից PNG-ի

JPEG-ը կորստի ձևաչափ է, որը օպտիմիզացված է բարդ լուսանկարների համար: JPEG-ը հասնում է ավելի բարձր սեղմման գործակիցների, ինչը հանգեցնում է ֆայլերի ավելի փոքր չափերի, թեև որակի աննշան կորստով:

Ի տարբերություն PNG-ի, JPEG-ը չի աջակցում թափանցիկությանը: Այն գերազանցում է տարբեր գույներով և գրադիենտներով լուսանկարչական պատկերներ ցուցադրելու հարցում:

Ահա թե ինչպես կարող եք փոխակերպել output.jpg ֆայլը input.png անունով PNG ֆայլի.

import (
    "bytes"
    "fmt"
    "image/jpeg"
    "image/png"
    "log"
    "os"
)
// JpegToPng converts a JPEG image to PNG format
func JpegToPng(imageBytes []byte) ([]byte, error) { 
    img, err := jpeg.Decode(bytes.NewReader(imageBytes))
    if err != nil {
        return nil, err
    }
    buf := new(bytes.Buffer)
    if err := png.Encode(buf, img); err != nil {
        return nil, err
    }
    return buf.Bytes(), nil
}

JpegToPng ֆունկցիան վերծանում է պատկերի բայթի հատվածը jpeg.Decode ֆունկցիայի միջոցով: Ֆունկցիան ստեղծում է նոր բուֆեր՝ պատկերը PNG ձևաչափով կոդավորելու համար png.Encode ֆունկցիայի միջոցով:

Ահա հիմնական ֆունկցիան, որը կանչում է JpegToPng ֆունկցիան.

func main() {
    // 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!")
}

հիմնական ֆունկցիան կարդում է JPEG պատկերը նշված գրացուցակից և կանչում JpegToPng ֆունկցիան: Այս ֆունկցիան վերադարձնում է պատկերի բայթ հատվածը PNG ձևաչափով:

Go-ն ապահովում է ամենաշատ հնարավորությունները, որոնք անհրաժեշտ են ձեր հավելվածները իր ստանդարտ գրադարանում ստեղծելու համար

Պատկերների փաթեթը Go-ի էկոհամակարգի բազմաթիվ բազմակողմանի գրադարաններից մեկն է: Պատկերների փաթեթի շնորհիվ դուք կարող եք կատարել պատկերային առաջադրանքներ՝ առանց արտաքին գրադարանների վրա հենվելու:

Go-ն տրամադրում է նաև այլ բազմակողմանի փաթեթներ, ներառյալ http փաթեթը՝ վեբ վրա հիմնված հավելվածներ ստեղծելու համար: http փաթեթը պարունակում է այն հատկանիշների մեծ մասը, որոնք անհրաժեշտ են վեբ հավելվածի սերվերային կողմը կառուցելու համար:

ՀՏՀ

Հարց. Ի՞նչ այլ տարբերակներ ունեմ PNG-ները JPEG-ների փոխարկելու համար:

Այս գործիքի ստեղծումը ծրագրավորման օգտակար վարժություն է, բայց կան պատկերներ փոխակերպելու ավելի լավ եղանակներ: Օրինակ, կարող եք օգտագործել Windows-ի մի քանի կոմունալ ծառայություններ՝ PNG-ը JPEG-ի փոխարկելու համար:

Հարց. Go-ն տրամադրո՞ւմ է ֆայլերի հետ աշխատելու այլ եղանակներ:

Go-ի os փաթեթը պարունակում է ֆայլերի մշակման հիմնական գործառույթ: Այն լավ համակցվում է filepath փաթեթի հետ, որը կարգավորում է ֆայլերի անունները և ուղիները:

Հարց. Որտե՞ղ կարող եմ գտնել նմուշ պատկերներ սա փորձելու համար:

Կան բազմաթիվ առցանց աղբյուրներ անվճար ֆոնդային պատկերների համար, որոնք հիանալի նմուշային տվյալներ են կազմում: