Skip to content

Instantly share code, notes, and snippets.

@1nVitr0
Last active September 25, 2019 19:49
Show Gist options
  • Save 1nVitr0/8e3f16d22ff5760f183453c2df4873db to your computer and use it in GitHub Desktop.
Save 1nVitr0/8e3f16d22ff5760f183453c2df4873db to your computer and use it in GitHub Desktop.
Photoshop Script to generate a random letter pattern. Includes a generous option dialog.
/**
* Created by Aram Becker - 09/25/2019
* You are free to use and modify this by any means, but it would be great
* if you would credit me.
*
* http://arambecker.de
**/
function coupleSlider(slider, box, round) {
round = typeof round == "number" ? Math.pow(10, round) : 100;
regex = round == 1 ? /\d+/ : /\d+\.?\d*/;
box.onChange = function() {
if (!regex.test(box.text)) box.text = Math.round(slider.value * round) / round;
slider.value = parseFloat(box.text);
};
slider.onChange = function() { box.text = Math.round(slider.value * round) / round; };
}
function coupleEnable(radioButton, target) {
if (!(target instanceof Array)) target = [target];
function update() { for (var i = 0; i < target.length; i++) target[i].enabled = radioButton.value; }
radioButton.onClick = update;
for (var i = 0; i < radioButton.parent.children.length; i++)
radioButton.parent.children[i].onClick = update;
}
// DIALOG
// ======
var dialog = new Window("dialog");
dialog.text = "Generate Random Letters";
dialog.orientation = "column";
dialog.alignChildren = ["center","top"];
dialog.spacing = 10;
dialog.margins = 16;
// LETTER_SETTINGS
// ===============
var letter_settings = dialog.add("panel", undefined, undefined, {name: "letter_settings"});
letter_settings.text = "Letter Settings";
letter_settings.preferredSize.width = 512;
letter_settings.orientation = "column";
letter_settings.alignChildren = ["left","top"];
letter_settings.spacing = 10;
letter_settings.margins = 10;
// GROUP0
// ======
var group0 = letter_settings.add("group", undefined, {name: "group0"});
group0.orientation = "row";
group0.alignChildren = ["left","center"];
group0.spacing = 10;
group0.margins = 0;
var statictext0 = group0.add("statictext", undefined, undefined, {name: "statictext0"});
statictext0.text = "Font:";
statictext0.preferredSize.width = 64;
var font_array = [];
for (var i = 0; i < app.fonts.length; i++) font_array.push(app.fonts[i].name);
font_array.sort();
var font = group0.add("dropdownlist", undefined, undefined, {name: "font", items: font_array});
font.preferredSize.width = 212;
font.selection = 0;
var font_bold = group0.add("checkbox", undefined, undefined, {name: "font_bold"});
font_bold.text = "Bold";
var font_italic = group0.add("checkbox", undefined, undefined, {name: "font_italic"});
font_italic.text = "Italic";
var preview = group0.add("statictext", undefined, undefined, {name: "preview"});
preview.text = "ABCD abcd 1234 #?!.";
preview.preferredSize.width = 196;
preview.graphics.font = font_array[0];
font.onChange = font_bold.onClick = font_italic.onClick = function() {
preview.graphics.font = ScriptUI.newFont(font_array[parseInt(font.selection)], font_bold.value ? (font_italic.value ? 3 : 1) : (font_italic.value ? 2 : 0), 12);
}
var select
// GROUP1
// ======
var group1 = letter_settings.add("group", undefined, {name: "group1"});
group1.orientation = "row";
group1.alignChildren = ["left","center"];
group1.spacing = 10;
group1.margins = 0;
var statictext1 = group1.add("statictext", undefined, undefined, {name: "statictext1"});
statictext1.text = "Number:";
statictext1.preferredSize.width = 64;
var letter_count_slider = group1.add("slider", undefined, undefined, undefined, undefined, {name: "letter_count_slider"});
letter_count_slider.minvalue = 0;
letter_count_slider.maxvalue = 200;
letter_count_slider.value = 10;
letter_count_slider.preferredSize.width = 256;
var letter_count_box = group1.add('edittext {justify: "right", properties: {name: "letter_count_box", enterKeySignalsOnChange: true}}');
letter_count_box.text = "10";
letter_count_box.preferredSize.width = 64;
var letter_count_reset = group1.add("button", undefined, undefined, {name: "letter_size_reset"});
letter_count_reset.text = "Reset";
letter_count_reset.alignment = ["left","top"];
coupleSlider(letter_count_slider, letter_count_box, 0);
letter_count_reset.onClick = function() {
letter_count_slider.value = 10;
letter_count_box.text = "10";
}
// LETTER_SETTINGS
// ===============
var divider1 = letter_settings.add("panel", undefined, undefined, {name: "divider1"});
divider1.alignment = "fill";
// GROUP2
// ======
var group2 = letter_settings.add("group", undefined, {name: "group2"});
group2.orientation = "row";
group2.alignChildren = ["left","center"];
group2.spacing = 10;
group2.margins = 0;
var statictext2 = group2.add("statictext", undefined, undefined, {name: "statictext2"});
statictext2.text = "Min Size:";
statictext2.preferredSize.width = 64;
var letter_min_size_slider = group2.add("slider", undefined, undefined, undefined, undefined, {name: "letter_min_size_slider"});
letter_min_size_slider.minvalue = 0;
letter_min_size_slider.maxvalue = 100;
letter_min_size_slider.value = 16;
letter_min_size_slider.preferredSize.width = 256;
var letter_min_size_box = group2.add('edittext {justify: "right", properties: {name: "letter_min_size_box", enterKeySignalsOnChange: true}}');
letter_min_size_box.text = "16";
letter_min_size_box.preferredSize.width = 64;
coupleSlider(letter_min_size_slider, letter_min_size_box, 1);
// GROUP3
// ======
var group3 = letter_settings.add("group", undefined, {name: "group3"});
group3.orientation = "row";
group3.alignChildren = ["left","center"];
group3.spacing = 10;
group3.margins = 0;
var statictext3 = group3.add("statictext", undefined, undefined, {name: "statictext3"});
statictext3.text = "Max Size:";
statictext3.preferredSize.width = 64;
var letter_max_size_slider = group3.add("slider", undefined, undefined, undefined, undefined, {name: "letter_max_size_slider"});
letter_max_size_slider.minvalue = 0;
letter_max_size_slider.maxvalue = 100;
letter_max_size_slider.value = 20;
letter_max_size_slider.preferredSize.width = 256;
var letter_max_size_box = group3.add('edittext {justify: "right", properties: {name: "letter_max_size_box", enterKeySignalsOnChange: true}}');
letter_max_size_box.text = "20";
letter_max_size_box.preferredSize.width = 64;
var letter_size_reset = group3.add("button", undefined, undefined, {name: "letter_size_reset"});
letter_size_reset.text = "Reset";
letter_size_reset.alignment = ["left","top"];
coupleSlider(letter_max_size_slider, letter_max_size_box, 1);
letter_size_reset.onClick = function() {
letter_min_size_slider.value = 16;
letter_min_size_box.text = "16";
letter_max_size_slider.value = 20;
letter_max_size_box.text = "20";
}
// LETTER_SETTINGS
// ===============
var divider2 = letter_settings.add("panel", undefined, undefined, {name: "divider2"});
divider2.alignment = "fill";
// GROUP4
// ======
var group4 = letter_settings.add("group", undefined, {name: "group4"});
group4.orientation = "row";
group4.alignChildren = ["left","center"];
group4.spacing = 10;
group4.margins = 0;
var statictext4 = group4.add("statictext", undefined, undefined, {name: "statictext4"});
statictext4.text = "Letters:";
statictext4.preferredSize.width = 64;
var letter_caps = group4.add("radiobutton", undefined, undefined, {name: "letter_caps"});
letter_caps.text = "CAPS";
var letter_small = group4.add("radiobutton", undefined, undefined, {name: "letter_small"});
letter_small.text = "small";
var letter_mixed = group4.add("radiobutton", undefined, undefined, {name: "letter_mixed"});
letter_mixed.text = "MiXeD";
var letter_numbers = group4.add("checkbox", undefined, undefined, {name: "letter_numbers"});
letter_numbers.text = "Numbers";
var divider_custom = group4.add("panel", undefined, undefined, {name: "divider_custom"});
divider_custom.alignment = "fill";
var letter_custom = group4.add("radiobutton", undefined, undefined, {name: "letter_custom"});
letter_custom.text = "Custom";
// GROUP5
// ======
var group5 = letter_settings.add("group", undefined, {name: "group5"});
group5.orientation = "row";
group5.alignChildren = ["left","center"];
group5.spacing = 10;
group5.margins = 0;
group5.enabled = false;
var statictext5 = group5.add("statictext", undefined, undefined, {name: "statictext5"});
statictext5.preferredSize.width = 64;
var letter_custom_regex = group5.add('edittext {properties: {name: "letter_custom_regex"}}');
letter_custom_regex.text = "A-Za-z0-9";
letter_custom_regex.preferredSize.width = 320;
var letter_custom_reset = group5.add("button", undefined, undefined, {name: "letter_custom_reset"});
letter_custom_reset.text = "Default";
coupleEnable(letter_custom, group5);
// PANEL1
// ======
var panel1 = dialog.add("panel", undefined, undefined, {name: "panel1"});
panel1.text = "Positioning";
panel1.preferredSize.width = 512;
panel1.orientation = "column";
panel1.alignChildren = ["left","top"];
panel1.spacing = 10;
panel1.margins = 10;
// GROUP6
// ======
var group6 = panel1.add("group", undefined, {name: "group6"});
group6.orientation = "row";
group6.alignChildren = ["left","center"];
group6.spacing = 10;
group6.margins = 0;
var statictext6 = group6.add("statictext", undefined, undefined, {name: "statictext6"});
statictext6.text = "Random:";
statictext6.preferredSize.width = 64;
var position_random = group6.add("checkbox", undefined, undefined, {name: "position_random"});
position_random.text = "Position";
position_random.value = true;
var rotation_random = group6.add("checkbox", undefined, undefined, {name: "rotation_random"});
rotation_random.text = "Rotation";
rotation_random.value = true;
var divider3 = group6.add("panel", undefined, undefined, {name: "divider3"});
divider3.alignment = "fill";
var position_reset = group6.add("button", undefined, undefined, {name: "position_reset"});
position_reset.text = "Reset Position";
var rotation_reset = group6.add("button", undefined, undefined, {name: "rotation_reset"});
rotation_reset.text = "Reset Rotation";
// GROUP7
// ======
var group7 = panel1.add("group", undefined, {name: "group7"});
group7.orientation = "row";
group7.alignChildren = ["left","center"];
group7.spacing = 10;
group7.margins = 0;
var statictext7 = group7.add("statictext", undefined, undefined, {name: "statictext7"});
statictext7.text = "Position:";
statictext7.preferredSize.width = 64;
var statictext8 = group7.add("statictext", undefined, undefined, {name: "statictext8"});
statictext8.text = "X:";
var position_from_x = group7.add('edittext {properties: {name: "position_from_x"}}');
position_from_x.text = "0";
position_from_x.preferredSize.width = 64;
var statictext9 = group7.add("statictext", undefined, undefined, {name: "statictext9"});
statictext9.text = "to";
var position_to_x = group7.add('edittext {properties: {name: "position_to_x"}}');
position_to_x.text = activeDocument.width.as("px");
position_to_x.preferredSize.width = 64;
var divider4 = group7.add("panel", undefined, undefined, {name: "divider4"});
divider4.alignment = "fill";
var statictext10 = group7.add("statictext", undefined, undefined, {name: "statictext10"});
statictext10.text = "Y:";
var position_from_y = group7.add('edittext {properties: {name: "position_from_y"}}');
position_from_y.text = "0";
position_from_y.preferredSize.width = 64;
var statictext11 = group7.add("statictext", undefined, undefined, {name: "statictext11"});
statictext11.text = "to";
var position_to_y = group7.add('edittext {properties: {name: "position_to_y"}}');
position_to_y.text = activeDocument.height.as("px");
position_to_y.preferredSize.width = 64;
coupleEnable(position_random, [position_to_x, position_to_y]);
position_reset.onClick = function() {
position_from_x.text = "0";
position_to_x.text = activeDocument.width.as("px");
position_from_y.text = "0";
position_to_y.text = activeDocument.height.as("px");
}
// GROUP8
// ======
var group8 = panel1.add("group", undefined, {name: "group8"});
group8.orientation = "row";
group8.alignChildren = ["left","center"];
group8.spacing = 10;
group8.margins = 0;
var statictext12 = group8.add("statictext", undefined, undefined, {name: "statictext12"});
statictext12.text = "Rotation:";
statictext12.preferredSize.width = 64;
var rotation_from = group8.add('edittext {properties: {name: "rotation_from"}}');
rotation_from.text = "0";
rotation_from.preferredSize.width = 64;
var statictext13 = group8.add("statictext", undefined, undefined, {name: "statictext13"});
statictext13.text = "to";
var rotation_to = group8.add('edittext {properties: {name: "rotation_to"}}');
rotation_to.text = "360";
rotation_to.preferredSize.width = 64;
var divider5 = group8.add("panel", undefined, undefined, {name: "divider5"});
divider5.alignment = "fill";
var statictext14 = group8.add("statictext", undefined, undefined, {name: "statictext14"});
statictext14.text = "Pivot:";
var pivot_center = group8.add("radiobutton", undefined, undefined, {name: "pivot_center"});
pivot_center.text = "Center";
var pivot_corner = group8.add("radiobutton", undefined, undefined, {name: "pivot_corner"});
pivot_corner.text = "Top Left";
coupleEnable(rotation_random, rotation_to);
rotation_reset.onClick = function() {
pivot_center.value = true;
rotation_from.text = "0";
rotation_to.text = "360";
}
// PANEL2
// ======
var panel2 = dialog.add("panel", undefined, undefined, {name: "panel2"});
panel2.text = "Colors";
panel2.preferredSize.width = 512;
panel2.orientation = "column";
panel2.alignChildren = ["left","top"];
panel2.spacing = 10;
panel2.margins = 10;
// GROUP9
// ======
var group9 = panel2.add("group", undefined, {name: "group9"});
group9.orientation = "row";
group9.alignChildren = ["left","center"];
group9.spacing = 10;
group9.margins = 0;
var statictext15 = group9.add("statictext", undefined, undefined, {name: "statictext15"});
statictext15.text = "Colors:";
statictext15.preferredSize.width = 64;
var colors_all = group9.add("radiobutton", undefined, undefined, {name: "colors_all"});
colors_all.text = "All";
var colors_gray = group9.add("radiobutton", undefined, undefined, {name: "colors_gray"});
colors_gray.text = "Grayscale";
var colors_mono = group9.add("radiobutton", undefined, undefined, {name: "colors_mono"});
colors_mono.text = "Monochrome";
var colors_mono_color_array = ["Red","Green","Blue"];
var colors_mono_color = group9.add("dropdownlist", undefined, undefined, {name: "colors_mono_color", items: colors_mono_color_array});
colors_mono_color.enabled = false;
colors_mono_color.selection = 0;
var colors_custom = group9.add("radiobutton", undefined, undefined, {name: "colors_custom"});
colors_custom.text = "Custom";
coupleEnable(colors_mono, colors_mono_color);
// GROUP10
// =======
var group10 = panel2.add("group", undefined, {name: "group10"});
group10.enabled = false;
group10.orientation = "row";
group10.alignChildren = ["left","center"];
group10.spacing = 10;
group10.margins = 0;
var statictext16 = group10.add("statictext", undefined, undefined, {name: "statictext16"});
statictext16.preferredSize.width = 64;
var statictext17 = group10.add("statictext", undefined, undefined, {name: "statictext17"});
statictext17.text = "Red:";
statictext17.preferredSize.width = 48;
var colors_red_from_slider = group10.add("slider", undefined, undefined, undefined, undefined, {name: "colors_red_from_slider"});
colors_red_from_slider.minvalue = 0;
colors_red_from_slider.maxvalue = 255;
colors_red_from_slider.value = 0;
colors_red_from_slider.preferredSize.width = 98;
var colors_red_from_box = group10.add('edittext {properties: {name: "colors_red_from_box"}}');
colors_red_from_box.text = "0";
colors_red_from_box.preferredSize.width = 48;
var statictext18 = group10.add("statictext", undefined, undefined, {name: "statictext18"});
statictext18.text = "to";
var colors_red_to_slider = group10.add("slider", undefined, undefined, undefined, undefined, {name: "colors_red_to_slider"});
colors_red_to_slider.minvalue = 0;
colors_red_to_slider.maxvalue = 255;
colors_red_to_slider.value = 255;
colors_red_to_slider.preferredSize.width = 98;
var colors_red_to_box = group10.add('edittext {properties: {name: "colors_red_to_box"}}');
colors_red_to_box.text = "255";
colors_red_to_box.preferredSize.width = 48;
coupleSlider(colors_red_from_slider, colors_red_from_box, 0);
coupleSlider(colors_red_to_slider, colors_red_to_box, 0);
// GROUP11
// =======
var group11 = panel2.add("group", undefined, {name: "group11"});
group11.enabled = false;
group11.orientation = "row";
group11.alignChildren = ["left","center"];
group11.spacing = 10;
group11.margins = 0;
var statictext19 = group11.add("statictext", undefined, undefined, {name: "statictext19"});
statictext19.preferredSize.width = 64;
var statictext20 = group11.add("statictext", undefined, undefined, {name: "statictext20"});
statictext20.text = "Green:";
statictext20.preferredSize.width = 48;
var colors_green_from_slider = group11.add("slider", undefined, undefined, undefined, undefined, {name: "colors_green_from_slider"});
colors_green_from_slider.minvalue = 0;
colors_green_from_slider.maxvalue = 255;
colors_green_from_slider.value = 0;
colors_green_from_slider.preferredSize.width = 98;
var colors_green_from_box = group11.add('edittext {properties: {name: "colors_green_from_box"}}');
colors_green_from_box.text = "0";
colors_green_from_box.preferredSize.width = 48;
var statictext21 = group11.add("statictext", undefined, undefined, {name: "statictext21"});
statictext21.text = "to";
var colors_green_to_slider = group11.add("slider", undefined, undefined, undefined, undefined, {name: "colors_green_to_slider"});
colors_green_to_slider.minvalue = 0;
colors_green_to_slider.maxvalue = 255;
colors_green_to_slider.value = 255;
colors_green_to_slider.preferredSize.width = 98;
var colors_green_to_box = group11.add('edittext {properties: {name: "colors_green_to_box"}}');
colors_green_to_box.text = "255";
colors_green_to_box.preferredSize.width = 48;
coupleSlider(colors_green_from_slider, colors_green_from_box, 0);
coupleSlider(colors_green_to_slider, colors_green_to_box, 0);
// GROUP12
// =======
var group12 = panel2.add("group", undefined, {name: "group12"});
group12.enabled = false;
group12.orientation = "row";
group12.alignChildren = ["left","center"];
group12.spacing = 10;
group12.margins = 0;
var statictext22 = group12.add("statictext", undefined, undefined, {name: "statictext22"});
statictext22.preferredSize.width = 64;
var statictext23 = group12.add("statictext", undefined, undefined, {name: "statictext23"});
statictext23.text = "Blue:";
statictext23.preferredSize.width = 48;
var colors_blue_from_slider = group12.add("slider", undefined, undefined, undefined, undefined, {name: "colors_blue_from_slider"});
colors_blue_from_slider.minvalue = 0;
colors_blue_from_slider.maxvalue = 255;
colors_blue_from_slider.value = 0;
colors_blue_from_slider.preferredSize.width = 98;
var colors_blue_from_box = group12.add('edittext {properties: {name: "colors_blue_from_box"}}');
colors_blue_from_box.text = "0";
colors_blue_from_box.preferredSize.width = 48;
var statictext24 = group12.add("statictext", undefined, undefined, {name: "statictext24"});
statictext24.text = "to";
var colors_blue_to_slider = group12.add("slider", undefined, undefined, undefined, undefined, {name: "colors_blue_to_slider"});
colors_blue_to_slider.minvalue = 0;
colors_blue_to_slider.maxvalue = 255;
colors_blue_to_slider.value = 255;
colors_blue_to_slider.preferredSize.width = 98;
var colors_blue_to_box = group12.add('edittext {properties: {name: "colors_blue_to_box"}}');
colors_blue_to_box.text = "255";
colors_blue_to_box.preferredSize.width = 48;
coupleSlider(colors_blue_from_slider, colors_blue_from_box, 0);
coupleSlider(colors_blue_to_slider, colors_blue_to_box, 0);
// GROUP15
// =======
var group15 = panel2.add("group", undefined, {name: "group15"});
group15.enabled = false;
group15.orientation = "row";
group15.alignChildren = ["left","center"];
group15.spacing = 10;
group15.margins = 0;
var statictextAlpha = group15.add("statictext", undefined, undefined, {name: "statictextAlpha"});
statictextAlpha.preferredSize.width = 64;
var statictextAlpha1 = group15.add("statictext", undefined, undefined, {name: "statictextAlpha1"});
statictextAlpha1.text = "Alpha:";
statictextAlpha1.preferredSize.width = 48;
var colors_alpha_from_slider = group15.add("slider", undefined, undefined, undefined, undefined, {name: "colors_alpha_from_slider"});
colors_alpha_from_slider.minvalue = 0;
colors_alpha_from_slider.maxvalue = 100;
colors_alpha_from_slider.value = 0;
colors_alpha_from_slider.preferredSize.width = 98;
var colors_alpha_from_box = group15.add('edittext {properties: {name: "colors_alpha_from_box"}}');
colors_alpha_from_box.text = "0";
colors_alpha_from_box.preferredSize.width = 48;
var statictextAlpha2 = group15.add("statictext", undefined, undefined, {name: "statictextAlpha2"});
statictextAlpha2.text = "to";
var colors_alpha_to_slider = group15.add("slider", undefined, undefined, undefined, undefined, {name: "colors_alpha_to_slider"});
colors_alpha_to_slider.minvalue = 0;
colors_alpha_to_slider.maxvalue = 100;
colors_alpha_to_slider.value = 100;
colors_alpha_to_slider.preferredSize.width = 98;
var colors_alpha_to_box = group15.add('edittext {properties: {name: "colors_alpha_to_box"}}');
colors_alpha_to_box.text = "100";
colors_alpha_to_box.preferredSize.width = 48;
coupleSlider(colors_alpha_from_slider, colors_alpha_from_box, 0);
coupleSlider(colors_alpha_to_slider, colors_alpha_to_box, 0);
coupleEnable(colors_custom, [group10, group11, group12, group15]);
// PANEL3
// ======
var panel3 = dialog.add("panel", undefined, undefined, {name: "panel2"});
panel3.text = "Layers";
panel3.preferredSize.width = 512;
panel3.orientation = "column";
panel3.alignChildren = ["left","top"];
panel3.spacing = 10;
panel3.margins = 10;
// GROUP14
// ======
var group14 = panel3.add("group", undefined, {name: "group14"});
group14.orientation = "row";
group14.alignChildren = ["left","center"];
group14.spacing = 10;
group14.margins = 0;
var statictextLayer = group2.add("statictext", undefined, undefined, {name: "statictextLayer"});
statictextLayer.text = "Layer Mode:";
statictextLayer.preferredSize.width = 64;
var keep = group14.add("radiobutton", undefined, undefined, {name: "keep"});
keep.text = "Keep as Text";
var rasterize = group14.add("radiobutton", undefined, undefined, {name: "rasterize"});
rasterize.text = "Rasterize";
var merge = group14.add("radiobutton", undefined, undefined, {name: "merge"});
merge.text = "Merge";
var fillBackground = group14.add("radiobutton", undefined, undefined, {name: "fillBackground"});
fillBackground.text = "Fill Background";
// GROUP13
// =======
var group13 = dialog.add("group", undefined, {name: "group13"});
group13.orientation = "row";
group13.alignChildren = ["left","center"];
group13.spacing = 10;
group13.margins = 0;
group13.alignment = ["right","top"];
var cancel = group13.add("button", undefined, undefined, {name: "cancel"});
cancel.text = "Cancel";
cancel.alignment = ["left","top"];
var generate = group13.add("button", undefined, undefined, {name: "generate"});
generate.text = "Generate";
generate.alignment = ["left","bottom"];
letter_caps.value = true;
pivot_center.value = true;
colors_all.value = true;
keep.value = true;
// Progress Dialog
var progress = new Window("palette", "Generating Letters...", undefined, {closeButton: false});
progress.orientation = "column";
progress.alignChildren = ["center","top"];
progress.spacing = 10;
progress.margins = 16;
var group20 = progress.add("group", undefined, {name: "group20"});
group20.orientation = "row";
group20.alignChildren = ["left","center"];
group20.spacing = 10;
group20.margins = 0;
group20.alignment = ["right","top"];
var progressbar = group20.add("progressbar", undefined, undefined, undefined, undefined, {name: "progressbar"});
progressbar.minvalue = 0;
progressbar.maxvalue = 100;
progressbar.value = 0;
progressbar.preferredSize.width = 256;
var percentage = group20.add("statictext", undefined, undefined, {name: "percentage"});
percentage.text = "0%";
percentage.preferredSize.width = 64;
generate.onClick = function() {
var settings = {
count: parseInt(letter_count_box.text),
font: ScriptUI.newFont(font_array[parseInt(font.selection)], font_bold.value ? (font_italic.value ? 3 : 1) : (font_italic.value ? 2 : 0), 12)
.toString().split(":")[0],
size: [parseFloat(letter_min_size_box.text), parseFloat(letter_max_size_box.text)],
letters: "",
position: position_random.value ? [{ x: parseFloat(position_from_x.text), y: parseFloat(position_from_y.text) },
{ x: parseFloat(position_to_x.text), y: parseFloat(position_to_y.text) }] :
{ x: parseFloat(position_from_x.text), y: parseFloat(position_from_y.text) },
rotation: rotation_random.value ? [ parseFloat(rotation_from.text) , parseFloat(rotation_to.text) ] :
parseFloat(rotation_from.text),
pivotCenter: pivot_center.value,
colors: {},
grayscale: colors_gray.value,
rasterize: rasterize.value,
merge: merge.value,
fillBackground: fillBackground.value
}
var letterRegex = letter_numbers.value ? "0-9" : "";
if (letter_caps.value) letterRegex += "A-Z";
else if (letter_small.value) letterRegex += "a-z";
else if (letter_mixed.value) letterRegex += "A-Za-z";
else letterRegex = letter_custom_regex.text;
letterRegex = letterRegex.replace(/-/g, "");
for (var i = 0; i < letterRegex.length; i += 2) {
if (i+1 >= letterRegex.length) letterRegex += letterRegex[i];
else {
for (var c = letterRegex.charCodeAt(i); c < letterRegex.charCodeAt(i+1); c++)
settings.letters += String.fromCharCode(c);
}
}
if (colors_all.value) {
settings.colors.r = [0, 255];
settings.colors.g = [0, 255];
settings.colors.b = [0, 255];
}
if (colors_mono.value) {
settings.colors.r = [0, 0];
settings.colors.g = [0, 0];
settings.colors.b = [0, 0];
switch(colors_mono_color.selection) {
case "0":
settings.colors.r[1] = 255;
break;
case "1":
settings.colors.g[1] = 255;
break;
case "2":
settings.colors.b[1] = 255;
break;
}
}
if (colors_custom.value) {
settings.colors.r = [parseInt(colors_red_from_box.text), parseInt(colors_red_to_box.text)];
settings.colors.g = [parseInt(colors_green_from_box.text), parseInt(colors_green_to_box.text)];
settings.colors.b = [parseInt(colors_blue_from_box.text), parseInt(colors_blue_to_box.text)];
settings.colors.a = [parseInt(colors_alpha_from_box.text), parseInt(colors_alpha_to_box.text)];
}
dialog.close();
progress.show();
try {
generateLetters(settings);
} catch(e) {
alert("An Error occured: " + e.message);
}
progress.close();
}
dialog.show();
function generateLetters(settings) {
var layers = activeDocument.artLayers;
progressbar.maxvalue = settings.count;
if (settings.fillBackground || settings.merge) {
progressbar.maxvalue++;
var layer = layers.add();
layer.name = "Random Letters";
if (settings.fillBackground )
activeDocument.selection.fill(backgroundColor );
progressbar.value++;
}
for (var i = 0; i < settings.count; i++) {
var content = settings.letters[Math.floor(Math.random()*settings.letters.length)];
var layer = layers.add();
layer.kind = LayerKind.TEXT;
layer.textItem.name = content;
layer.textItem.contents = content;
layer.textItem.font = settings.font;
layer.textItem.size = Math.random()*(settings.size[1]-settings.size[0])+settings.size[0];
if (typeof settings.rotation == "number") layer.rotate(settings.rotation, settings.pivotCenter ? AnchorPosition.MIDDLECENTER : AnchorPosition.TOPLEFT);
else layer.rotate((Math.random()*(settings.rotation[1] - settings.rotation[0]) + settings.rotation[0]),
settings.pivotCenter ? AnchorPosition.MIDDLECENTER : AnchorPosition.TOPLEFT);
var color = new SolidColor();
if (settings.grayscale) {
color.rgb.red = color.rgb.green = color.rgb.blue = Math.round(Math.random()*255);
} else {
color.rgb.red = Math.round(Math.random()*(settings.colors.r[1] - settings.colors.r[0]) + settings.colors.r[0]);
color.rgb.green = Math.round(Math.random()*(settings.colors.g[1] - settings.colors.g[0]) + settings.colors.g[0]);;
color.rgb.blue = Math.round(Math.random()*(settings.colors.b[1] - settings.colors.b[0]) + settings.colors.b[0]);;
}
layer.textItem.color = color;
if (settings.colors.a) {
layer.opacity = Math.random()*(settings.colors.a[1]-settings.colors.a[0])+settings.colors.a[0];
}
var bounds = [layer.bounds[0].as("px")*0.5+layer.bounds[2].as("px")*0.5, layer.bounds[1].as("px")*0.5+layer.bounds[3].as("px")*0.5];
layer.translate(-bounds[0], -bounds[1]);
if (!(settings.position instanceof Array)) layer.translate(settings.position.x, settings.position.y);
else layer.translate(Math.random()*(settings.position[1].x - settings.position[0].x) + settings.position[0].x,
Math.random()*(settings.position[1].y - settings.position[0].y) + settings.position[0].y);
if (settings.rasterize || settings.merge || settings.fillBackground) layer.rasterize(RasterizeType.TEXTCONTENTS);
if (settings.merge || settings.fillBackground) layer.merge();
progressbar.value++;
percentage = Math.round(i / settings.count * 100) + "%";
}
}
@1nVitr0
Copy link
Author

1nVitr0 commented Sep 25, 2019

For an Example: https://imgur.com/a/3GmRVNH

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment