github.com/status-im/status-go@v1.1.0/images/color.go (about) 1 package images 2 3 import ( 4 "fmt" 5 "image/color" 6 "strconv" 7 "strings" 8 ) 9 10 func ParseColor(colorStr string) (color.RGBA, error) { 11 var c color.RGBA 12 13 if strings.HasPrefix(colorStr, "#") { 14 // Parse hex color string 15 // Remove "#" prefix 16 colorStr = colorStr[1:] 17 18 // Convert to RGBA 19 val, err := strconv.ParseUint(colorStr, 16, 32) 20 if err != nil { 21 return c, err 22 } 23 c.R = uint8(val >> 16) 24 c.G = uint8(val >> 8) 25 c.B = uint8(val) 26 c.A = 255 27 } else if strings.HasPrefix(colorStr, "rgb(") { 28 // Parse RGB color string 29 // Remove prefix and suffix 30 colorStr = strings.TrimSuffix(strings.TrimPrefix(colorStr, "rgb("), ")") 31 32 // Split the string into comma separated parts 33 parts := strings.Split(colorStr, ",") 34 if len(parts) != 3 { 35 return c, fmt.Errorf("invalid RGB color string") 36 } 37 38 // Convert to RGBA 39 r, err := strconv.Atoi(strings.TrimSpace(parts[0])) 40 if err != nil { 41 return c, err 42 } 43 g, err := strconv.Atoi(strings.TrimSpace(parts[1])) 44 if err != nil { 45 return c, err 46 } 47 b, err := strconv.Atoi(strings.TrimSpace(parts[2])) 48 if err != nil { 49 return c, err 50 } 51 c.R = uint8(r) 52 c.G = uint8(g) 53 c.B = uint8(b) 54 c.A = 255 55 } else if strings.HasPrefix(colorStr, "rgba(") { 56 // Parse RGBA color string 57 // Remove prefix and suffix 58 colorStr = strings.TrimSuffix(strings.TrimPrefix(colorStr, "rgba("), ")") 59 60 // Split the string into comma separated parts 61 parts := strings.Split(colorStr, ",") 62 if len(parts) != 4 { 63 return c, fmt.Errorf("invalid RGBA color string") 64 } 65 66 // Convert to RGBA 67 r, err := strconv.Atoi(strings.TrimSpace(parts[0])) 68 if err != nil { 69 return c, err 70 } 71 g, err := strconv.Atoi(strings.TrimSpace(parts[1])) 72 if err != nil { 73 return c, err 74 } 75 b, err := strconv.Atoi(strings.TrimSpace(parts[2])) 76 if err != nil { 77 return c, err 78 } 79 a, err := strconv.ParseFloat(strings.TrimSpace(parts[3]), 64) 80 if err != nil { 81 return c, err 82 } 83 if a < 0 || a > 1 { 84 return c, fmt.Errorf("invalid RGBA alpha value") 85 } 86 c.R = uint8(r) 87 c.G = uint8(g) 88 c.B = uint8(b) 89 c.A = uint8(a * 255) 90 } else { 91 return c, fmt.Errorf("invalid color string format") 92 } 93 94 return c, nil 95 }