go Langue d'apprentissage - notes 4

cardioïde go génération d'image de test.

Idée: go paquets de données d'image image générée -> en format html, afficher des photos via le web.

Tout d'abord le script (changer le format de données -> html)

gofile = $ 1 
htmfile = 2 $ 
aller construire $ gofile.go 
eval "./$gofile" >> temp_go_jpg.data 

si [-e "$ htmfile.html"] 
alors 
        rm $ htmfile.html 
fi echo "<img src = \" données: image / png; base64, ">> $ htmfile.html 
sed -i "s / IMAGE: // g" temp_go_jpg.data 
temp_go_jpg.data chat >> $ htmfile.html 
echo "\">" >> $ htmfile .html 
rm temp_go_jpg.data



Dans lequel les données de remplacement est la partie marquée en rouge.

echo "<img src = \" data: image / png; base64, » >> $ htmfile.html

sed -i "s / IMAGE: // g" temp_go_jpg.data

cat temp_go_jpg.data >> $ htmfile.html

echo "\"> » >> $ htmfile.html

Si ce fichier script est gen.sh, allez fichier image.go, à générer index.html, qui peut exécuter la commande ./gen.sh index d'images

 

cardioïde équation sélectionnée: (X 2 + Y 2 - T) 3. = X 2 Y 3.

Pour un peu d'effet de gradient, région colorée en forme de coeur change selon t

Code est la suivante:

paquet principal 

import ( 
	"golang.org/x/tour/pic" 
	"image" 
	"image / couleur" 
	"math" 
) 

struct image de type { 
	int largeur 
} 

//计算心形线半径
func (img * image) CalcHeartRadius (x , y, décalage int) float64 { 
	//心形线方程: (x ^ 2 + y ^ 2 - t) ^ 3 = x ^ 2 * y ^ 3,求t 
	//做标轴修正x = x, y = -y,方程(x ^ 2 + y ^ 2 - t) ^ 3 = 0 - x ^ 2 * y ^ 3,求t 
	// x = x - décalage, y = y - décalage 
	fx: = float64 (x ) - float64 (shift) 
	fy: = float64 (y) - float64 (shift) 

	fValue1: = Math.pow (fx, 2) 
	fCbrt: = math.Cbrt (fValue1) * fy 
	ft: = Math.pow (fx, 2 ) + Math.pow (fy, 2) + fCbrt	 
	si ft <0 { 
		return 0 
	}
	retour Math.sqrt (ft) 
} 

func (* img image) modèle colorimétrique () {color.Model 
	retour color.RGBAModel 
} 

func (img * image) Bounds () {image.Rectangle 
	retour image.Rect (0, 0, img. largeur, img.width) 
} 

func (img image *) A (x, y int) {color.Color 
	intShift: = img.width / 2 
	rayon: = img.CalcHeartRadius (x, y, intShift) 
	fmax: = float64 ( intShift) * 0,9 
		
	si le rayon> fmax { 
		retour color.RGBA {0, 0, 0, 0} 
	} 
	intRadius: = uint8 (rayon) 
	si Fmax> 150 { 
		intRadius = uint8 (150 * float64 (intRadius) / fmax) 
	} 
	
	retour color.RGBA {255 intRadius, 0, 0, 255} 
} 

func main () { 
	largeur: = 240 
	m: = {largeur} image 
	pic.ShowImage (& m)
}

Parce que les paquets vont axe de coordonnées de l'image, l'axe Y dans la direction vers le bas, c.-à-point (0,0) en haut à gauche de la place, de façon à changer l'équation, y est remplacé -Y, en outre devient le centre du coeur de forme (largeur / 2, la largeur / 2), traduisant ainsi l'équation, x = x largeur / 2, y = y-Wdith / 2

Une fois généré, html ouvert, visualiser des images, des images comme suit:

 

Je suppose que tu aimes

Origine www.cnblogs.com/gsjtu/p/12640175.html
conseillé
Classement