Maison > Article > développement back-end > Comment faire pivoter les images Golang
Golang est un langage de programmation qui prend en charge de nombreuses opérations et techniques, dont la rotation d'images. Dans cet article, nous apprendrons comment utiliser Golang pour implémenter la rotation d'image.
Tout d'abord, nous devons préparer quelques bibliothèques et outils nécessaires qui nous permettent d'opérer facilement sur les images. Voici les bibliothèques que nous devons utiliser :
Tout d'abord, nous devons ouvrir cette image et utiliser la fonction image.Decode
pour la décoder en un type d'image :
file, err := os.Open("night.jpg") if err != nil { log.Fatal(err) } img, _, err := image.Decode(file) if err != nil { log.Fatal(err) }
Ensuite, nous pouvons utiliser la fonction image.NewRGBA
fonction Créez une nouvelle image RGBA, puis dessinez l'image originale dans la nouvelle image via image.Draw
. Le but est de garantir que nos modifications sur l'image originale n'affecteront pas l'image originale elle-même : image.Decode
函数将其解码为Image类型:
rotated := image.NewRGBA(image.Rect(0, 0, img.Bounds().Dy(), img.Bounds().Dx())) draw.Draw(rotated, rotated.Bounds(), img, img.Bounds().Min, draw.Src)
接下来,我们可以通过image.NewRGBA
函数创建一个新的RGBA图像,然后通过image.Draw
将原图像绘制到这个新的图像中。这样做的目的是为了确保我们对原图像的修改不会影响原图像本身:
angle := 45.0 radians := angle * math.Pi / 180.0 sin := math.Sin(radians) cos := math.Cos(radians)
在图片旋转的过程中,我们需要指定一个旋转的角度。我们可以使用math.Pi
来获取圆周率,并使用math.Sin
和math.Cos
函数计算出不同角度下的sin值和cos值,以此来计算旋转的矩阵。
matrix := affine.NewMatrix3( cos, sin, 0, -sin, cos, 0, 0, 0, 1, ) transform := affine.NewAffineTransform(matrix, rotated.Bounds()) transform.Invert() affineRect := transform.Bounds(rotated.Bounds()) result := image.NewRGBA(image.Rect(0, 0, affineRect.Dx(), affineRect.Dy())) draw.Draw(result, result.Bounds(), rotated, affineRect.Min, draw.Src) affineRect = transform.Bounds(rotated.Bounds())
然后,我们可以创建一个image.Affine
变换矩阵,并将其应用于我们的图像来实现旋转。image.Affine
out, err := os.Create("rotated.jpg") if err != nil { log.Fatal(err) } jpeg.Encode(out, result, &jpeg.Options{Quality: 100})Dans le processus de rotation de l'image, nous devons spécifier un angle de rotation. Nous pouvons utiliser
math.Pi
pour obtenir pi, et utiliser les fonctions math.Sin
et math.Cos
pour calculer la somme des valeurs de sin sous différents angles La valeur cos est utilisée pour calculer la matrice de rotation.
package main import ( "image" "image/draw" "image/jpeg" "log" "math" "github.com/disintegration/gift/affine" "os" ) func main() { file, err := os.Open("night.jpg") if err != nil { log.Fatal(err) } img, _, err := image.Decode(file) if err != nil { log.Fatal(err) } rotated := image.NewRGBA(image.Rect(0, 0, img.Bounds().Dy(), img.Bounds().Dx())) draw.Draw(rotated, rotated.Bounds(), img, img.Bounds().Min, draw.Src) angle := 45.0 radians := angle * math.Pi / 180.0 sin := math.Sin(radians) cos := math.Cos(radians) matrix := affine.NewMatrix3( cos, sin, 0, -sin, cos, 0, 0, 0, 1, ) transform := affine.NewAffineTransform(matrix, rotated.Bounds()) transform.Invert() affineRect := transform.Bounds(rotated.Bounds()) result := image.NewRGBA(image.Rect(0, 0, affineRect.Dx(), affineRect.Dy())) draw.Draw(result, result.Bounds(), rotated, affineRect.Min, draw.Src) affineRect = transform.Bounds(rotated.Bounds()) out, err := os.Create("rotated.jpg") if err != nil { log.Fatal(err) } jpeg.Encode(out, result, &jpeg.Options{Quality: 100}) }Nous pouvons ensuite créer une matrice de transformation
image.Affine
et l'appliquer à notre image pour réaliser la rotation. La matrice image.Affine
peut nous aider à effectuer des transformations telles que la rotation, la translation et la mise à l'échelle de l'image dans l'espace tridimensionnel : rrreee
Enfin, nous enregistrons l'image traitée dans un fichier local :rrreee
Complete Le code est le suivant : 🎜rrreee🎜Jusqu'à présent, nous avons implémenté avec succès la fonction de rotation d'image à l'aide de Golang. Grâce au code ci-dessus, nous pouvons non seulement faire pivoter l'image, mais également effectuer d'autres opérations sur l'image. Golang fournit de nombreuses excellentes bibliothèques de traitement d'images, et nous pouvons les combiner avec les fonctionnalités du langage de programmation de Golang pour créer des applications plus belles et plus pratiques. 🎜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!