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: