Solve It
We will use a similar idea to the red filter, but using a filter based around a different color for each stripe.
Code It
function filterRainbow(image) {
var height = image.getHeight();
for (var pixel of image.values()) {
var y = pixel.getY();
var avg = (pixel.getRed() + pixel.getGreen() + pixel.getBlue()) / 3;
if (y < height / 7) {
//red
if (avg < 128) {
pixel.setRed(2 * avg);
pixel.setGreen(0);
pixel.setBlue(0);
} else {
pixel.setRed(255);
pixel.setGreen(2 * avg - 255);
pixel.setBlue(2 * avg - 255);
}
} else if (y < height * 2 / 7) {
//orange
if (avg < 128) {
pixel.setRed(2 * avg);
pixel.setGreen(0.8*avg);
pixel.setBlue(0);
} else {
pixel.setRed(255);
pixel.setGreen(1.2*avg-51);
pixel.setBlue(2 * avg - 255);
}
} else if (y < height * 3 / 7) {
//yellow
if (avg < 128) {
pixel.setRed(2 * avg);
pixel.setGreen(2*avg);
pixel.setBlue(0);
} else {
pixel.setRed(255);
pixel.setGreen(255);
pixel.setBlue(2 * avg - 255);
}
} else if (y < height * 4 / 7) {
//green
if (avg < 128) {
pixel.setRed(0);
pixel.setGreen(2*avg);
pixel.setBlue(0);
} else {
pixel.setRed(2*avg-255);
pixel.setGreen(255);
pixel.setBlue(2 * avg - 255);
}
} else if (y < height * 5 / 7) {
//blue
if (avg < 128) {
pixel.setRed(0);
pixel.setGreen(0);
pixel.setBlue(2*avg);
} else {
pixel.setRed(2*avg-255);
pixel.setGreen(2 * avg - 255);
pixel.setBlue(255);
}
} else if (y < height * 6 / 7) {
//indigo
if (avg < 128) {
pixel.setRed(.8*avg);
pixel.setGreen(0);
pixel.setBlue(2*avg);
} else {
pixel.setRed(1.2*avg-51);
pixel.setGreen(2 * avg - 255);
pixel.setBlue(255);
}
} else {
//violet
if (avg < 128) {
pixel.setRed(1.6*avg);
pixel.setGreen(0);
pixel.setBlue(1.6*avg);
} else {
pixel.setRed(0.4*avg+153);
pixel.setGreen(2 * avg - 255);
pixel.setBlue(0.4*avg+153);
}
}
}
}
var img = new SimpleImage("chapel.png");
filterRainbow(img);
print (img);
See It
Available Images
chapel.png
[231x308]
rodger.png
[315x424]
astrachan.jpg
[240x360]
duvall.jpg
[200x300]
hilton.jpg
[140x210]
lion.jpg
[250x188]
Drop your images onto the area above to make it available within your code editor on this page. Note: your images will not be uploaded anywhere, they will stay on your computer.