Ինչպես փոխարկել 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 փաթեթի հետ, որը կարգավորում է ֆայլերի անունները և ուղիները:
Հարց. Որտե՞ղ կարող եմ գտնել նմուշ պատկերներ սա փորձելու համար:
Կան բազմաթիվ առցանց աղբյուրներ անվճար ֆոնդային պատկերների համար, որոնք հիանալի նմուշային տվյալներ են կազմում: