Ejemplo n.º 1
0
func Example() {
	f, _ := os.Open("firefox.png")
	img, _, _ := image.Decode(f)
	f.Close()
	fmt.Println(dominantcolor.Hex(dominantcolor.Find(img)))
	// Output: #CA5527
}
Ejemplo n.º 2
0
func findAmountOfPurpleInImage(imageFile *os.File) (int, error) {
	img, _, err := image.Decode(imageFile)
	if err != nil {
		return -1, err
	}
	img = turnGreyIntoWhite(img)
	//logImage(img);
	dominantColor := dominantcolor.Find(img)
	distanceToPurple := coloralgorithms.DistanceBetweenColors(dominantColor, purple)

	// The distance should be as small as possible, but the rank should be as high as possible
	rank := int(coloralgorithms.MAX_DISTANCE - distanceToPurple)
	return rank, nil
}
Ejemplo n.º 3
0
func BenchmarkFind(b *testing.B) {
	f, err := os.Open("firefox.png")
	if err != nil {
		b.Fatal(err)
	}
	img, _, err := image.Decode(f)
	if err != nil {
		b.Fatal(err)
	}
	f.Close()
	for i := 0; i < b.N; i++ {
		dominantcolor.Find(img)
	}
}
Ejemplo n.º 4
0
func TestFind(t *testing.T) {
	f, err := os.Open("firefox.png")
	if err != nil {
		t.Fatal(err)
	}
	img, _, err := image.Decode(f)
	if err != nil {
		t.Fatal(err)
	}
	f.Close()
	c := dominantcolor.Find(img)
	d := distance(c, firefoxOrange)
	t.Log("Found dominant color:", dominantcolor.Hex(c))
	t.Log("Firefox orange:      ", dominantcolor.Hex(firefoxOrange))
	t.Logf("Distance:             %.2f", d)
	if d > 50 {
		t.Errorf("Found color is not close.")
	}
}
Ejemplo n.º 5
0
// ProcessImage reads image by reading info and resize optionally to desiredSize, we just print errors and skip to the next element
func (inputInfo ImageInputInfo) ProcessImage(relativerootpath string, basepath string) {

	/* first, fetch the data */
	f, err := os.Open(inputInfo.InURL)
	if err != nil {
		fmt.Fprintln(os.Stderr, "Error while reading image ", inputInfo.InURL, err)
		return
	}
	defer f.Close()

	sourceimg, _, err := image.Decode(f)
	if err != nil {
		fmt.Fprintln(os.Stderr, "Couldn't decode image ", inputInfo.InURL, err)
		return
	}

	size := sourceimg.Bounds().Size()
	averagecolor := dominantcolor.Hex(dominantcolor.Find(sourceimg))

	for scalefactor, widths := range IMGBREAKPOINTS {
		for _, width := range widths {
			if width > size.X {
				fmt.Fprintln(os.Stderr, "Couldn't scale back to ", strconv.Itoa(width), " as the image is ", strconv.Itoa(size.X), " width for ", inputInfo.InURL)
				continue
			}
			outputInfo, err := generateImageAndInfos(inputInfo, relativerootpath, sourceimg, width, int(float32(inputInfo.Cropheight)*scalefactor), averagecolor, basepath)
			if err != nil {
				fmt.Fprintln(os.Stderr, "An error occured while extracting or saving ", inputInfo.InURL, err)
				continue
			}
			fmt.Print(outputInfo)
		}
	}

	// Add image (eventually cropped) at full width
	outputInfo, err := generateImageAndInfos(inputInfo, relativerootpath, sourceimg, -1, inputInfo.Cropheight, averagecolor, basepath)
	if err != nil {
		fmt.Fprintln(os.Stderr, "An error occured while extracting or saving ", inputInfo.InURL, err)
	}
	fmt.Print(outputInfo)

}