Golang-Bildtypkonvertierung
May 15, 2023 am 10:09 AMGo ist eine Programmiersprache, die in der Netzwerkprogrammierung, im Cloud Computing, in verteilten Systemen und in anderen Bereichen weit verbreitet ist. Auch ihre Anwendung in der Bildverarbeitung hat nach und nach Aufmerksamkeit erregt. In der Go-Sprache ist die Bildtypkonvertierung ein allgemeiner Bildverarbeitungsvorgang, mit dem Bilder in einem Format in ein anderes Format konvertiert werden können, beispielsweise Bilder im JPEG-Format in Bilder im PNG-Format. In diesem Artikel wird erläutert, wie Bildtypen in die Go-Sprache konvertiert werden.
- Bilder lesen
Bevor Sie den Bildtyp konvertieren, müssen Sie das Bild zuerst lesen. Das Bildpaket wird in der Standardbibliothek der Go-Sprache bereitgestellt. Zusätzlich zur Unterstützung grundlegender Pixeloperationen bietet es auch eine Schnittstelle zum Lesen und Schreiben von Bildern. Wir können die Decode-Funktion im Bildpaket verwenden, um Bilder zu lesen. Der Parameter der Decode-Funktion ist ein Parameter vom Typ io.Reader. Daher können wir die Open-Funktion im Betriebssystempaket verwenden, um eine Datei zu öffnen, und dann das Dateihandle an die Decode-Funktion übergeben.
Das Folgende ist ein Beispielcode:
package main import ( "fmt" "image" "os" ) func main() { file, err := os.Open("image.jpg") if err != nil { fmt.Println(err) return } defer file.Close() img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } fmt.Println(img.Bounds()) }
Im obigen Beispielcode verwenden wir die Open-Funktion im Betriebssystempaket, um die Datei mit dem Namen image.jpg zu öffnen, und übergeben dann das Dateihandle zum Lesen an die image.Decode-Funktion das Bild. Die Decode-Funktion gibt ein Objekt img vom Typ image.Image und ein Codierungsformat vom Typ String zurück. Wir verwenden das _-Symbol, um das Codierungsformat zu ignorieren. Schließlich drucken wir die Grenzinformationen des Bildes (img.Bounds()), einschließlich der Breite, Höhe und anderer Informationen des Bildes.
- Konvertierung des Bildtyps
Natürlich erfordert die Konvertierung von Bildern in einem Format in Bilder in einem anderen Format die Verwendung von zwei verschiedenen Encodern. Die Standardbibliothek der Go-Sprache bietet eine Vielzahl von Bildkodierern, darunter JPEG, PNG, GIF, BMP und andere Formate. Unterschiedliche Bildformate verfügen über unterschiedliche Encoder, implementieren jedoch dieselbe Schnittstelle, sodass wir im Code auf die gleiche Weise Bilder in verschiedene Formate konvertieren können.
Das Folgende ist ein Beispielcode zum Konvertieren eines Bildes im JPEG-Format in ein Bild im PNG-Format:
package main import ( "fmt" "image" "image/jpeg" "image/png" "os" ) func main() { file, err := os.Open("image.jpg") if err != nil { fmt.Println(err) return } defer file.Close() img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } out, err := os.Create("image.png") if err != nil { fmt.Println(err) return } defer out.Close() err = png.Encode(out, img) if err != nil { fmt.Println(err) return } }
Im obigen Beispielcode verwenden wir zuerst die Funktion Dekodieren im Paket image/jpeg, um das Bild im JPEG-Format zu lesen, und dann Verwenden Sie die Encode-Funktion im Paket image/png, um das Bild in eine Datei im PNG-Format zu schreiben. Es ist zu beachten, dass wir zwar die Funktion png.Encode verwenden, diese jedoch Bilder in unterschiedlichen Formaten verarbeiten kann, da der Encoder dieselbe Schnittstelle implementiert.
- Bildgröße ändern
Beim Konvertieren von Bildtypen müssen Sie möglicherweise auch die Bildgröße ändern. Die Standardbibliothek der Go-Sprache stellt das Bildpaket zur Verarbeitung von Pixeldaten bereit. Entwickler können Pixel direkt bearbeiten, um die Bildgröße anzupassen. Das Bildpaket bietet eine Vielzahl von Methoden zur Größenänderung, darunter Resize, ResizeNRGBA, ResizeRGBA usw. Das Folgende ist ein Beispielcode, der die Größe des Bildes auf eine Breite von 200 Pixeln ändert:
package main import ( "fmt" "image" "image/jpeg" "image/png" "os" ) func main() { file, err := os.Open("image.jpg") if err != nil { fmt.Println(err) return } defer file.Close() img, _, err := image.Decode(file) if err != nil { fmt.Println(err) return } newImg := resize(img, 200, 0) out, err := os.Create("image.png") if err != nil { fmt.Println(err) return } defer out.Close() err = png.Encode(out, newImg) if err != nil { fmt.Println(err) return } } func resize(img image.Image, width, height uint) image.Image { if height == 0 { height = uint(float64(width) * float64(img.Bounds().Dy()) / float64(img.Bounds().Dx())) } newImg := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) draw.CatmullRom.Scale(newImg, newImg.Bounds(), img, img.Bounds(), draw.Src, nil) return newImg }
Im obigen Beispielcode definieren wir eine Größenänderungsfunktion, in der die Funktion CatmullRom.Scale im Zeichenpaket zum Konvertieren des Originalbilds verwendet wird Größe auf die angegebene Größe ändern. Es ist zu beachten, dass die Breiten- und Höhenparameter, die wir an die Größenänderungsfunktion übergeben, die Breite bzw. Höhe des angepassten Bildes darstellen, wobei die Breite 200 Pixel beträgt und die Höhe aus dem Seitenverhältnis des Bildes berechnet wird. Auf diese Weise kann die Funktion der proportionalen Skalierung des Bildes erreicht werden.
Zusammenfassung:
In diesem Artikel wird kurz die Methode zur Bildtypkonvertierung in der Go-Sprache vorgestellt, einschließlich des Lesens von Bildern, Anpassen der Bildgröße usw. In der tatsächlichen Entwicklung können Entwickler je nach spezifischen Anforderungen eine Vielzahl von Bildkodierern und Werkzeugen zur Bildgrößenänderung auswählen, um ihre eigenen Bildverarbeitungsfunktionen zu implementieren.
Das obige ist der detaillierte Inhalt vonGolang-Bildtypkonvertierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie schreibe ich Dateien in Go Language bequem?
