Copy link to clipboard
Copied
I have 10x10 rectangles, I want to fill all selected items gradually from exact 0 to 1 lightness values.
I tried to write this one below but it doesn't really clamp for the blackest point. (RGB values still show as 3,3,3) What am I missing? And also there should be an easier solution for it.
// Fill all selected items with gradually from black to white
var doc = app.activeDocument;
var rgbCol = new RGBColor();
var col = [];
doc.defaultFillColor = rgbCol;
var hslColor = [];
var hue = hslColor.push(hue);
var saturation = hslColor.push(saturation);
var lightness = hslColor.push(lightness);
var selectedCount = app.selection.length;
function hslToRgb(h, s, l) {
var r, g, b;
if (s == 0) {
r = g = b = l; // achromatic
} else {
function hue2rgb(p, q, t) {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1/6) return p + (q - p) * 6 * t;
if (t < 1/2) return q;
if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
return p;
}
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1/3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1/3);
}
return [ r * 255, g * 255, b * 255 ];
}
function clamp(num, min, max) {
return num <= min ? min : num >= max ? max : num;
}
function main() {
for (var a=0; a<selectedCount; a++)
{
hslColor[0] = 0;
hslColor[1] = 0;
value = (100 - (a * (100/selectedCount)))/100;
hslColor[2] = clamp(value,0.0,1.0);
//alert (hslColor[2]);
col = hslToRgb(hslColor[0],hslColor[1],hslColor[2]);
rgbCol.red = col[0];
rgbCol.green = col[1];
rgbCol.blue = col[2];
app.selection[a].filled = true;
app.selection[a].fillColor =rgbCol;
}
}
main();
Hi arteangelus,
Here is a simpler starting point:
var items = app.activeDocument.selection;
for (var j = 0; j < items.length; j++) {
var k = (j / (items.length - 1)) * 100;
items[j].fillColor = makeColorGray(k);
}
function makeColorGray(k) {
var c = new GrayColor();
c.gray = k;
return c;
}
What do you think? Is it on the right track? If you wanted to keep the hue and saturation values but just change the lightness, perhaps you can use the k value calculation as lightness va
...Copy link to clipboard
Copied
Hi arteangelus,
Here is a simpler starting point:
var items = app.activeDocument.selection;
for (var j = 0; j < items.length; j++) {
var k = (j / (items.length - 1)) * 100;
items[j].fillColor = makeColorGray(k);
}
function makeColorGray(k) {
var c = new GrayColor();
c.gray = k;
return c;
}
What do you think? Is it on the right track? If you wanted to keep the hue and saturation values but just change the lightness, perhaps you can use the k value calculation as lightness value in your own code?
Regards,
Mark
Copy link to clipboard
Copied
Yes, definitely it also gives 0,0,0 as RGB in the beginning. Thank you.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now