Maison  >  Article  >  développement back-end  >  conversion de type d'image golang

conversion de type d'image golang

WBOY
WBOYoriginal
2023-05-15 10:09:071168parcourir

Go est un langage de programmation largement utilisé dans la programmation réseau, le cloud computing, les systèmes distribués et d'autres domaines. Son application dans le traitement d'images a également progressivement attiré l'attention. Dans le langage Go, la conversion de type d'image est une opération courante de traitement d'image, qui permet de convertir des images d'un format vers un autre format, comme la conversion d'images au format JPEG en images au format PNG. Cet article explique comment convertir les types d'images en langage Go.

  1. Lire les images

Avant de convertir le type d'image, vous devez d'abord lire l'image. Le package image est fourni dans la bibliothèque standard du langage Go. En plus de prendre en charge les opérations de base sur les pixels, il fournit également des interfaces pour la lecture et l'écriture d'images. Nous pouvons utiliser la fonction Decode dans le package image pour lire des images. Le paramètre de la fonction Decode est un paramètre de type io.Reader, nous pouvons donc utiliser la fonction Open dans le package os pour ouvrir un fichier, puis transmettre le handle de fichier à la fonction Decode.

Ce qui suit est un exemple de code :

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

Dans l'exemple de code ci-dessus, nous utilisons la fonction Open du package os pour ouvrir le fichier nommé image.jpg, puis passons le handle de fichier à la fonction image.Decode pour lire l'image. La fonction Decode renvoie un objet de type image.Image img et un format d'encodage de type chaîne. Nous utilisons le symbole _ pour ignorer le format d'encodage. Enfin, nous imprimons les informations sur les limites de l'image (img.Bounds()), qui incluent la largeur, la hauteur et d'autres informations de l'image.

  1. Conversion de type d'image

Évidemment, la conversion d'images dans un format en images dans un autre format nécessite l'utilisation de deux encodeurs différents. La bibliothèque standard du langage Go fournit une variété d'encodeurs d'images, notamment JPEG, PNG, GIF, BMP et d'autres formats. Différents formats d'image ont des encodeurs différents, mais ils implémentent la même interface, afin que nous puissions utiliser la même manière dans le code pour convertir des images dans différents formats.

Ce qui suit est un exemple de code pour convertir une image au format JPEG en une image au format PNG :

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

Dans l'exemple de code ci-dessus, nous utilisons d'abord la fonction Decode du package image/jpeg pour lire l'image au format JPEG, puis utiliser La fonction Encode du package image/png écrit l'image dans un fichier au format PNG. Il convient de noter que bien que nous utilisions la fonction png.Encode, elle peut gérer des images dans différents formats car l'encodeur implémente la même interface.

  1. Redimensionnement de l'image

Lors de la conversion de types d'images, vous devrez peut-être également redimensionner l'image. La bibliothèque standard du langage Go fournit le package d'images pour traiter les données de pixels. Les développeurs peuvent directement opérer sur les pixels pour ajuster la taille de l'image. Le package d'images fournit une variété de méthodes de redimensionnement, notamment Resize, ResizeNRGBA, ResizeRGBA, etc. Voici un exemple de code qui redimensionne l'image à une largeur de 200 pixels :

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
}

Dans l'exemple de code ci-dessus, nous définissons une fonction de redimensionnement, dans laquelle la fonction CatmullRom.Scale du package draw est utilisée pour convertir l'image d'origine. Redimensionner à la taille spécifiée. Il convient de noter que les paramètres de largeur et de hauteur que nous transmettons à la fonction de redimensionnement représentent respectivement la largeur et la hauteur de l'image ajustée, où la largeur est de 200 pixels et la hauteur est calculée à partir du rapport hauteur/largeur de l'image. De cette manière, la fonction de mise à l'échelle proportionnelle de l'image peut être obtenue.

Résumé :

Cet article présente brièvement la méthode de conversion de type d'image en langage Go, y compris la lecture des images, l'ajustement de la taille de l'image, etc. Dans le développement réel, les développeurs peuvent choisir une variété d'encodeurs d'image et d'outils de redimensionnement d'image en fonction de besoins spécifiques pour implémenter leurs propres fonctions de traitement d'image.

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!

Déclaration:
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