


Gibt es eine Bibliothek für Go, die palettenförmige PNGs mit 2-Bit-Farbtiefe öffnen kann?
php-Editor Xigua Go ist eine leistungsstarke Programmiersprache, aber gibt es eine Bibliothek, die Paletten-PNG mit 2-Bit-Farbtiefe öffnen kann? Die Antwort ist ja. Die Go-Sprache verfügt über zahlreiche Bibliotheken und Tools zum Arbeiten mit Bildern, von denen einige palettenförmige PNG-Bilder in bestimmten Tiefen öffnen und verarbeiten können. Mithilfe dieser Bibliotheken können Sie palettierte PNG-Bilder mit 2-Bit-Farbtiefe problemlos lesen und bearbeiten und so Ihren Anwendungen mehr Funktionalität und Flexibilität verleihen. Unabhängig davon, ob Sie Anfänger oder erfahrener Go-Entwickler sind, können diese Bibliotheken Ihnen dabei helfen, Ihre Ziele zu erreichen, indem sie bessere Bildverarbeitungs- und Bearbeitungsmöglichkeiten bieten.
Frageninhalt
Wie lese ich palettenbasierte PNG-Bilder mit go?
Für Bilder in Python kann ich einfach Folgendes tun:
from pil import image im = image.open('image.png') pix = im.load() for i in range(100): for j in range(100): print(pix[i, j])
Verwenden Sie go:
f, err := os.open("image.png") if err != nil { log.fatal(err) } defer f.close() pal, ok := cfg.colormodel.(color.palette) // ok is true if ok { for i := range pal { cr, cg, cb, ca := pal[i].rgba() fmt.printf("pal[%3d] = %5d,%5d,%5d,%5d\n", i, cr, cg, cb, ca) } } img, err := png.decode(f) if err != nil { log.fatal(err) // fails here!! } for y := img.bounds().min.y; y < img.bounds().max.y; y++ { for x := img.bounds().min.x; x < img.bounds().max.x; x++ { log.println("img.at(x, y):", img.at(x, y)) } fmt.print("\n") }
Beim Dekodieren wird „png: ungültiges Format: keine PNG-Datei“ ausgegeben.
Wenn ich den Befehl file
auf der Mac-Shell verwende, heißt es:
image.png: png image data, 100 x 100, 2-bit colormap, non-interlaced
vscode rendert Bilder sehr gut.
Ich habe es sowohl an einem mit Adobe Illustrator erstellten Bild als auch an einem mit dem folgenden Code generierten Bild ausprobiert. Beide erhalten den gleichen Fehler:
func createPNG() { // Create a new image with the desired dimensions img := image.NewPaletted(image.Rect(0, 0, 100, 100), color.Palette{ color.RGBA{255, 0, 0, 255}, // Red color.RGBA{0, 255, 0, 255}, // Green color.RGBA{0, 0, 255, 255}, // Blue }) // Set the pixel colors in the image for x := 0; x < 100; x++ { for y := 0; y < 100; y++ { switch { case x < 50 && y < 50: img.SetColorIndex(x, y, 0) // Set the pixel at (x, y) to red case x >= 50 && y < 50: img.SetColorIndex(x, y, 1) // Set the pixel at (x, y) to green case x < 50 && y >= 50: img.SetColorIndex(x, y, 2) // Set the pixel at (x, y) to blue default: img.SetColorIndex(x, y, 3) // Set the pixel at (x, y) to transparent } } } // Create a new file to save the PNG image file, err := os.Create("image.png") if err != nil { panic(err) } defer file.Close() // Encode the image as a PNG and save it to the file err = png.Encode(file, img) if err != nil { panic(err) } }
Workaround
Es scheint, dass es in Ihrem Fall nicht am Format des Bildes liegt, sondern an der Art und Weise, wie Sie die Bilddatei verwenden.
Ich gehe davon aus, dass Sie es zuerst an image.DecodeConfig()
(代码没有显示它,但 cfg
必须已初始化),然后传递给 image.Decode()
weitergeben.
Das Problem besteht darin, dass Ihre Datei nach dem ersten Aufruf einen Offset hat, der zweite Aufruf jedoch davon ausgeht, dass sie vom Anfang der Datei liest.
Sie können dieses Problem lösen, indem Sie die Datei nach dem Lesen der Konfiguration zurücksetzen:
File.Seek(0, io.SeekStart)
Das obige ist der detaillierte Inhalt vonGibt es eine Bibliothek für Go, die palettenförmige PNGs mit 2-Bit-Farbtiefe öffnen kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Go Zeigersyntax und Probleme bei der Verwendung der Viper -Bibliothek bei der Programmierung in Go -Sprache. Es ist entscheidend, die Syntax und Verwendung von Zeigern zu verstehen, insbesondere in ...

In Bezug auf das Problem der benutzerdefinierten Struktur -Tags in Goland bei der Verwendung von Goland für GO -Sprachentwicklung stoßen Sie häufig auf einige Konfigurationsprobleme. Einer von ihnen ist ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Go Language Slice Index: Warum fasst ein Einzelelement-Slice aus Index 1 ohne Fehler ab? In der GO -Sprache sind Scheiben eine flexible Datenstruktur, die sich auf den Boden beziehen kann ...

Wenn das GO -Sprachprogramm ausgeführt wird, wie kann man zwischen dem Debug -Modus und dem normalen Betriebsmodus unterscheiden? Viele Entwickler möchten GO -Programme nach verschiedenen Betriebsmodi entwickeln ...
