// Script to Generate Random Graphics for Moo Cards // Example: http://www.flickr.com/photos/jpick/3335073434/ // Modified from Google example - same license as Top Draw (Google BSD-style) var name = "Jim Pick"; //var fontName = "Data70SH-Regular"; var fontName = "Helvetica"; // Fill with desktop with Colored rect with same top left and bottom right colors var db = new Rect(0, 0, 1040, 696); var target = new Layer(db); var bltr = new Color; var tl = new Color(0.15); var br = new Color(0.4); // Coloring clockwise from bottom left target.coloredRect(db, bltr, tl, bltr, br); var rnd = new Randomizer(0.1, 1); // Green & blue Particles var p1 = new Particles; p1.velocityXRandomizer = new Randomizer(100, 300); p1.velocityYRandomizer = new Randomizer(50, 80); p1.accelerationXRandomizer = new Randomizer(-5, 5); p1.accelerationYRandomizer = new Randomizer(-5, 5); p1.maxParticles = 20; p1.location = new Point(0, db.height * rnd.floatValue); p1.gravity = new Point(0, -19); p1.alphaDelta = 0.01; p1.alphaDelay = 30; p1.maxAge = 90; p1.trailWidth = 4; var c1 = new Color(0, 1, 0, 0.0); var c2 = new Color(0.3, 0, 1, 0.0); p1.addColor(c1.vary(0, 0.3, 0.3, 0.0)); p1.addColor(c2.vary(0.1, 0, 0.5, 0.0)); // Red and orange var p2 = new Particles; p2.velocityXRandomizer = new Randomizer(-5, 25); p2.velocityYRandomizer = new Randomizer(20, 100); p2.accelerationXRandomizer = new Randomizer(-10, 10); p2.accelerationYRandomizer = new Randomizer(5, 10); p2.maxParticles = 90; p2.location = new Point(db.width * rnd.floatValue * 0.75, 0); p2.gravity = new Point(0, -9); p2.alphaDelta = -0.003; p2.trailWidth = 2; p2.addColor(new Color(1, 0, 0, 0.4)); var orange = new Color("orange"); orange.a = 0.3; p2.addColor(orange); // Gravity well var randomXLoc = new Randomizer(500, db.width); var randomYLoc = new Randomizer(200, db.height); var loc = new Point(randomXLoc.floatValue, randomYLoc.floatValue); var gp = new GravityPoint(); gp.location = loc; gp.gravity = -240; p1.addGravityPoint(gp); p2.addGravityPoint(gp); // Simulator gets drawn in its own layer var simulatorLayer = new Layer(db); var simulator = new Simulator; simulator.addSimulatorObject(p1); simulator.addSimulatorObject(p2); // The time step controls the "fine" detail or smoothness simulator.timeStep = 0.2; // The run parameter is the duration of the simulation simulator.runInLayer(simulatorLayer, 150); // simulator.runInLayer(desktop2, 150); // Bloom var bloom = new Filter("CIBloom"); bloom.setKeyValue("inputRadius", 80); bloom.setKeyValue("inputIntensity", 3); // Blur var blur = new Filter("CIGaussianBlur"); blur.setKeyValue("inputRadius", 16); blur.inputFilter = bloom; simulatorLayer.applyFilter(blur); // Draw text randomly var text = new Text(name); var xRnd = new Randomizer(0, db.width); var yRnd = new Randomizer(0, db.height); var sizeRnd = new Randomizer(32, 512); var count = 15 * compositor.screenCount; var rotateRnd = new Randomizer(0, 2 * Math.PI); var variation = 0.5; var fontColor = new Color; fontColor.a = 0.2; var simImg = new Image(simulatorLayer); target.drawImage(simImg, db); var desktop2 = new Layer(db); // Draw for (var i = 0; i < count; ++i) { text.fontName = fontName; text.foregroundColor = fontColor.vary(variation, variation, variation, 0); text.fontSize = sizeRnd.intValue / 3; // Rotate randomly var pt = new Point(xRnd.intValue, yRnd.intValue); desktop2.save(); desktop2.translate(pt.x, pt.y); desktop2.rotate(rotateRnd.floatValue); desktop2.translate(-pt.x, -pt.y); desktop2.drawText(text, pt); desktop2.restore(); } // Apply a filter to make it more interesting var f; var filterRnd = new Randomizer; f = new Filter("CIGaussianBlur"); f.setKeyValue("inputRadius", (2 + filterRnd.floatValue * 3)); desktop2.applyFilter(f); var d2img = new Image(desktop2); target.drawImage(d2img, db); var img = new Image(target); desktop.drawImage(img, db); // Get Unix time var foo = new Date; var unixtime_ms = foo.getTime(); var unixtime = parseInt(unixtime_ms / 1000); // Write out file into ~/Library/Application\ Support/Google/TopDraw img.exportImage("moocard-" + unixtime + ".png", "png");