commit f2cfc0feea875113687c83fee203f35a6c1430d8 Author: IllusionMan1212 Date: Sun Oct 3 08:40:10 2021 +0300 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..55aaa36 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# ColorX (WIP) +ColorX is a library to determine the most prominent color in an image. + +# Example +Example code is written in [example/example.go](https://github.com/illusionman1212/colorx/blob/master/example/example.go) + +# Supported Image Formats +Currently ColorX supports these image formats: +- png +- jpeg diff --git a/color.go b/color.go new file mode 100644 index 0000000..3f5ed37 --- /dev/null +++ b/color.go @@ -0,0 +1,47 @@ +// ColorX library project +// Copyright (C) 2021 IllusionMan1212 and contributors +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, see https://www.gnu.org/licenses. + +package colorx + +import ( + "bytes" + "fmt" + "image" + + _ "image/jpeg" + _ "image/png" +) + +// GetProminentColor gets the most prominent color in the image bytes reader that gets passed in. +// returns a hex color as a string. +func GetProminentColor(data []byte) (string, error) { + buf := bytes.NewBuffer(data) + img, _, err := image.Decode(buf) + if err != nil { + return "", err + } + + width := img.Bounds().Max.X + height := img.Bounds().Max.Y + + pixels := height * width + + fmt.Printf("Pixels in image: %v\n", pixels) + fmt.Printf("Width: %v\n", width) + fmt.Printf("Height: %v\n", height) + + return "", nil +} diff --git a/example/example.go b/example/example.go new file mode 100644 index 0000000..634ff2b --- /dev/null +++ b/example/example.go @@ -0,0 +1,47 @@ +// ColorX library project +// Copyright (C) 2021 IllusionMan1212 and contributors +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, see https://www.gnu.org/licenses. + +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + + "github.com/illusionman1212/colorx" +) + +func main() { + args := os.Args + filePath := "example.jpg" + + if len(args) > 1 { + filePath = args[1] + } + + data, err := ioutil.ReadFile(filePath) + if err != nil { + log.Fatal(err) + } + + color, err := colorx.GetProminentColor(data) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("The most prominent color is: %v\n", color) +} diff --git a/example/example.jpg b/example/example.jpg new file mode 100644 index 0000000..40dfe2c Binary files /dev/null and b/example/example.jpg differ diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..ecffcd1 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/illusionman1212/colorx + +go 1.16