Éditeur PHP Xigua Go est un langage de programmation puissant, mais existe-t-il une bibliothèque capable d'ouvrir la palette PNG avec une profondeur de couleur de 2 bits ? La réponse est oui. Le langage Go dispose de nombreuses bibliothèques et outils pour travailler avec des images, dont certains peuvent ouvrir et traiter des images PNG en palette à des profondeurs spécifiques. En utilisant ces bibliothèques, vous pouvez facilement lire et modifier des images PNG en palette avec une profondeur de couleur de 2 bits, ajoutant ainsi plus de fonctionnalités et de flexibilité à vos applications. Que vous soyez un développeur Go débutant ou expérimenté, ces bibliothèques peuvent vous aider à atteindre vos objectifs, en offrant de meilleures capacités de traitement et d'édition d'images.
Comment lire des images png basées sur une palette à l'aide de go ?
Pour les images en python, je peux simplement faire ce qui suit :
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])
Utilisez 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") }
Il affichera "png : format invalide : pas un fichier png" lors du décodage.
Si j'utilise la commande file
sur le shell Mac, cela dit :
image.png: png image data, 100 x 100, 2-bit colormap, non-interlaced
vscode rend très bien les images.
Je l'ai essayé à la fois sur une image créée par Adobe Illustrator et sur une image générée par le code suivant. Les deux obtiennent la même erreur :
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) } }
Il semble que dans votre cas, ce n'est pas le format de l'image mais la façon dont vous utilisez le fichier image.
Je suppose que vous le transmettez d'abord à image.DecodeConfig()
(代码没有显示它,但 cfg
必须已初始化),然后传递给 image.Decode()
.
Le problème est qu'après le premier appel, votre fichier a un décalage, mais le deuxième appel suppose qu'il lit depuis le début du fichier.
Vous pouvez résoudre ce problème en annulant le fichier après avoir lu la configuration :
Fichier.Seek(0, io.SeekStart)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!