Maison > développement back-end > Golang > le corps du texte

Comment retourner des images dans Golang

PHPz
Libérer: 2023-04-25 13:51:18
original
721 Les gens l'ont consulté

Golang est un langage de programmation efficace et évolutif, doté également de fortes capacités d'expression lors du traitement des images. Dans cet article, nous explorerons comment retourner des images à l'aide de Golang.

Avant de commencer, nous devons comprendre les connaissances de base des images. Dans les ordinateurs, les images sont composées de pixels et chaque pixel a une valeur de couleur. La disposition de ces pixels ensemble forme une image. Lorsque nous retournons une image, nous échangeons les positions des pixels, modifiant ainsi l'orientation de l'image.

Voyons maintenant comment utiliser Golang pour retourner des images.

Tout d’abord, nous devons importer les packages image et image/couleur pour faciliter le traitement de l’image. Ensuite, nous créons un nouvel objet image et lisons les données d'image d'origine. Ensuite, nous définissons la direction du retournement, qui peut être un retournement horizontal ou un retournement vertical. Pour un retournement horizontal, il suffit d'échanger les pixels de chaque ligne ; pour un retournement vertical, nous devons échanger les pixels de chaque colonne. Le code est le suivant :

import (
    "image"
    "image/color"
)

func flipImage(originalImage image.Image, direction string) image.Image {

    // Get the dimensions of the original image
    width := originalImage.Bounds().Size().X
    height := originalImage.Bounds().Size().Y
    
    // Create a new image with the same size as the original image
    newImage := image.NewRGBA(originalImage.Bounds())
    
    // Loop through every pixel in the new image
    for x := 0; x < width; x++ {
        for y := 0; y < height; y++ {
            
            // Calculate the new x,y position based on the flip direction
            newX := x
            newY := y
            if direction == "horizontal" {
                newX = width - x - 1
            } else {
                newY = height - y - 1
            }
            
            // Get the color of the pixel at the original x,y position
            originalPixel := originalImage.At(x, y)
            r, g, b, a := originalPixel.RGBA()
            
            // Set the color of the pixel at the new x,y position in the new image
            newImage.Set(newX, newY, color.RGBA{uint8(r), uint8(g), uint8(b), uint8(a)})
        }
    }
    
    // Return the new image
    return newImage
}
Copier après la connexion

Dans ce code, nous utilisons l'objet image.RGBA pour représenter la nouvelle image. RVB représente les trois couleurs rouge, vert et bleu, et le canal A (Alpha) représente la transparence. Lors de l'obtention de la couleur du pixel d'origine, nous utilisons la fonction RGBA(), qui renvoie quatre valeurs entières de 16 bits, représentant les canaux rouge, vert, bleu et Alpha. Étant donné que les nouvelles images sont créées en unités de pixels, nous utilisons la fonction Set() lors de la définition de la couleur des nouveaux pixels.

Maintenant, nous sommes prêts à retourner l'image en utilisant le code ci-dessus. Nous pouvons utiliser le code suivant pour tester :

package main

import (
    "fmt"
    "image/jpeg"
    "os"
)

func main() {
    // Open the image file
    file, err := os.Open("original.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    // Decode the image file
    originalImage, err := jpeg.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Flip the image horizontally
    flippedImage := flipImage(originalImage, "horizontal")

    // Save the flipped image to a new file
    newFile, err := os.Create("flipped.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer newFile.Close()

    jpeg.Encode(newFile, flippedImage, &jpeg.Options{Quality: 100})
}
Copier après la connexion

Dans le code ci-dessus, nous ouvrons un fichier image nommé original.jpg, puis utilisons la fonction jpeg.Decode() pour décoder le fichier. Ensuite, nous utilisons la fonction flipImage() pour retourner l'image originale horizontalement et générer un nouvel objet flippedImage. Enfin, nous utilisons la fonction jpeg.Encode() pour enregistrer la nouvelle image dans un fichier appelé flipped.jpg.

En fonctionnement réel, vous pouvez essayer d'utiliser la direction verticale pour le retournement, changez simplement le deuxième paramètre de la fonction flipImage() en "vertical". Vous pouvez également essayer d'exploiter des images dans d'autres formats, en utilisant simplement les décodeurs et encodeurs correspondants.

Résumé : retourner une image à l'aide de Golang est une tâche relativement simple. En utilisant les packages d'images et de couleurs, vous pouvez facilement lire, modifier et enregistrer des données d'image. Dans des applications plus volumineuses, vous pouvez utiliser ces techniques pour développer des algorithmes de traitement d’image plus avancés.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal