Αυτά τα εύχρηστα εργαλεία γραμμής εντολών δείχνουν την ευελιξία του Golang.

Η μετατροπή μορφής εικόνας είναι ζωτικής σημασίας για την ανάπτυξη λογισμικού για την παροχή συμβατότητας και αποτελεσματικού χειρισμού εικόνας σε διαφορετικά συστήματα. Μπορείτε να βελτιστοποιήσετε την αποθήκευση, τη μετάδοση, την απόδοση και τον χειρισμό εικόνων μετατρέποντας εικόνες μεταξύ μορφών.

Υπάρχουν πολλά πακέτα για μετατροπή μορφής εικόνας στο οικοσύστημα Go και το Golang παρέχει ένα πακέτο εικόνας για μορφοποίηση και μετατροπή εικόνας. Το πακέτο εικόνας παρέχει βασικές λειτουργίες 2D εικόνας, συμπεριλαμβανομένων δυνατοτήτων για αποκωδικοποίηση, κωδικοποίηση, αλλαγή μεγέθους και περιστροφή εικόνων.

Ξεκινώντας με το πακέτο εικόνας

Η ενσωματωμένη βιβλιοθήκη εικόνων της Go παρέχει ολοκληρωμένη λειτουργικότητα για εργασία με εικόνες σε διάφορες μορφές. ο εικόνα Το πακέτο παρέχει υποστήριξη για ανάγνωση, γραφή και χειρισμό εικόνων.

ο εικόνα Το πακέτο υποστηρίζει πολλαπλές τύπους αρχείων εικόνας και μορφές, συμπεριλαμβανομένων των JPEG, PNG, GIF και BMP. Σας επιτρέπει να διαβάζετε και να αποκωδικοποιείτε εικόνες από αρχεία ή ροές και να κωδικοποιείτε και να γράφετε εικόνες σε αρχεία ή ροές. Αυτό διευκολύνει την εργασία με διαφορετικούς τύπους εικόνων στο Go, ανεξάρτητα από τη μορφή τους.

instagram viewer

Η βιβλιοθήκη προσφέρει επίσης εκτεταμένη λειτουργικότητα για χειρισμό και επεξεργασία εικόνας. ο εικόνα Το πακέτο παρέχει μεθόδους πρόσβασης σε μεμονωμένα pixel, επιτρέποντας χειρισμό χαμηλού επιπέδου για εργασίες όπως η τροποποίηση τιμών εικονοστοιχείων ή η εφαρμογή προσαρμοσμένων φίλτρων.

Επιπλέον, το πακέτο υποστηρίζει μοντέλα χρωμάτων και παρέχει εργαλεία για μετατροπή μεταξύ διαφορετικών χρωματικών αναπαραστάσεων. Αυτό είναι βολικό για την εργασία με εικόνες σε διάφορους χρωματικούς χώρους.

Μετατροπή εικόνων από PNG σε JPEG

Τα PNG και JPEG είναι μορφές εικόνας που χρησιμοποιούνται συνήθως, το καθένα με ξεχωριστά χαρακτηριστικά. Το PNG είναι μια μορφή χωρίς απώλειες που αντικαθιστά το GIF, υποστηρίζοντας εικόνες υψηλής ποιότητας με διατηρημένα δεδομένα εικόνας και διαφάνεια. Το PNG είναι κατάλληλο για εικόνες με ευκρινείς άκρες, κείμενο ή περιοχές ομοιόμορφου χρώματος.

ο εικόνα συσκευασία περιέχει jpeg και png πακέτα που μπορείτε να χρησιμοποιήσετε για τη μετατροπή μορφής εικόνας μεταξύ των δύο μορφών.

Μπορείτε να γράψετε μια συνάρτηση για τη μετατροπή εικόνων PNG σε μορφή JPEG. Ακολουθεί ένα παράδειγμα που δέχεται ως είσοδο τη ροή δεδομένων byte εικόνας:

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

ο ToJpeg η λειτουργία εντοπίζει τον τύπο περιεχομένου με το http. DetectContentType λειτουργία. Αυτή η συνάρτηση παίρνει το κομμάτι byte εικόνας ως είσοδο και επιστρέφει τον τύπο περιεχομένου ως συμβολοσειρά.

ο αλλαγή υπό όρους έχει μια θήκη που ελέγχει αν η μορφή εικόνας είναι PNG. Η συνάρτηση αποκωδικοποιεί το κομμάτι byte εικόνας εάν είναι εικόνα PNG με το εικόνα. Αποκρυπτογραφώ λειτουργία.

Τέλος, το ToJpeg η λειτουργία δημιουργεί ένα νέο buffer και κωδικοποιεί την εικόνα σε μορφή JPEG με το jpeg. Κωδικοποίηση λειτουργία.

Μπορείτε να φορτώσετε την εικόνα PNG πριν καλέσετε το ToJpeg με το os. ReadFile λειτουργία:

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

ο κύριος η συνάρτηση διαβάζει την εικόνα PNG από τον καθορισμένο κατάλογο πριν καλέσει το ToJpeg λειτουργία. ο ToJpeg Η λειτουργία επιστρέφει ένα κομμάτι byte της εικόνας σε μορφή JPEG.

ο κύριος Η λειτουργία γράφει το αρχείο JPEG στην καθορισμένη διαδρομή με το os. WriteFile λειτουργία. Μετά από μια επιτυχημένη διαδικασία μετατροπής, το κύριος λειτουργία εκτυπώνει ένα μήνυμα στην κονσόλα.

Μετατροπή εικόνων από JPEG σε PNG

Το JPEG είναι μια μορφή με απώλειες βελτιστοποιημένη για σύνθετες φωτογραφίες. Το JPEG επιτυγχάνει υψηλότερους λόγους συμπίεσης, με αποτέλεσμα μικρότερα μεγέθη αρχείων, αν και με ελαφρά απώλεια ποιότητας.

Σε αντίθεση με το PNG, το JPEG δεν υποστηρίζει διαφάνεια. Διαπρέπει στην εμφάνιση φωτογραφικών εικόνων με διάφορα χρώματα και διαβαθμίσεις.

Δείτε πώς μπορείτε να μετατρέψετε το output.jpg αρχείο σε ένα αρχείο PNG με όνομα input.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
}

ο JpegToPng η συνάρτηση αποκωδικοποιεί το κομμάτι byte εικόνας με το jpeg. Αποκρυπτογραφώ λειτουργία. Η συνάρτηση δημιουργεί ένα νέο buffer για την κωδικοποίηση της εικόνας σε μορφή PNG με το png. Κωδικοποίηση λειτουργία.

Εδώ είναι το κύριος συνάρτηση που καλεί το JpegToPng λειτουργία:

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

ο κύριος η συνάρτηση διαβάζει την εικόνα JPEG από τον καθορισμένο κατάλογο και καλεί το JpegToPng λειτουργία. Αυτή η συνάρτηση επιστρέφει ένα κομμάτι byte της εικόνας σε μορφή PNG.

Το Go παρέχει τις περισσότερες δυνατότητες που χρειάζεστε για να δημιουργήσετε τις εφαρμογές σας στην τυπική βιβλιοθήκη του

Το πακέτο εικόνων είναι μία από τις πολλές ευέλικτες βιβλιοθήκες στο οικοσύστημα της Go. Χάρη στο πακέτο εικόνων, μπορείτε να εκτελείτε εργασίες εικόνας χωρίς να βασίζεστε σε εξωτερικές βιβλιοθήκες.

Το Go παρέχει επίσης άλλα ευέλικτα πακέτα, συμπεριλαμβανομένου του πακέτου http για τη δημιουργία εφαρμογών που βασίζονται στο web. Το πακέτο http περιέχει τις περισσότερες από τις δυνατότητες που χρειάζεστε για τη δημιουργία της πλευράς διακομιστή μιας εφαρμογής Ιστού.