Last active
April 6, 2023 22:32
-
-
Save mvanga/b1b8839f94aae70e34cfa3fb334e8845 to your computer and use it in GitHub Desktop.
A skeleton Processing sketch that allows for exporting high-resolution versions of whatever is on screen.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import processing.pdf.*; | |
/* | |
* A complete tutorial can be found over at: | |
* http://sighack.com/post/exporting-high-resolution-images-in-processing | |
*/ | |
int seed; | |
int CONFIG_SCALE_FACTOR = 5; | |
void setup() { | |
size(720, 720); | |
seed = millis(); | |
seededRender(); | |
} | |
void draw() { | |
} | |
void seededRender() { | |
randomSeed(seed); | |
noiseSeed(seed); | |
render(); | |
} | |
void render() { | |
/* Write your drawing code here */ | |
smooth(); | |
noStroke(); | |
colorMode(HSB, 360, 100, 100); | |
background(255, 0, 100); | |
float hue = random(360); | |
for (int i = 0; i < 10000; i++) { | |
float r = random(10, 50); | |
fill(hue, 50 + random(-50, 50), 50 + random(-50, 50), 50); | |
ellipse(random(-width/2, width * 5/4), random(-height/2, height * 5/4), r, r); | |
} | |
} | |
/* | |
* The keyPressed handler handles the following | |
* -- If the key 's' (lower case) is pressed, then | |
* it will save a low-resolution version of the | |
* image into a file 'lowres-<seed>.png'. | |
* | |
* -- If the key 'h' (lower case) is pressed, then | |
* it will save a high-resolution version into | |
* the file 'highres-<seed>.png', scaled by an | |
* amount set in the SCALE_FACTOR variable. | |
* So if your screen width is 500 pixels, a | |
* scale factor of 10 will generate a | |
* high-resolution version that is 5000x5000px. | |
* | |
* -- If the key 'p' (lower case) is pressed, then | |
* it will save a vector version as PDF into the | |
* file 'vector-<seed>.pdf', which is inherently | |
* scalable to any resolution. | |
* | |
* -- If any other key is pressed, a new random | |
* seed is generated and the render function | |
* called again to generate a new artwork. | |
*/ | |
void keyPressed() { | |
if (key == 's') { | |
saveLowRes(); | |
} else if (key == 'h') { | |
saveHighRes(CONFIG_SCALE_FACTOR); | |
} else if (key == 'p') { | |
savePDF(); | |
} else { | |
seed = millis(); | |
seededRender(); | |
} | |
} | |
void saveLowRes() { | |
println("Saving low-resolution image..."); | |
save(seed + "-lowres.png"); | |
println("Finished"); | |
} | |
void saveHighRes(int scaleFactor) { | |
PGraphics hires = createGraphics( | |
width * scaleFactor, | |
height * scaleFactor, | |
JAVA2D); | |
println("Saving high-resolution image..."); | |
beginRecord(hires); | |
hires.scale(scaleFactor); | |
seededRender(); | |
endRecord(); | |
hires.save(seed + "-highres.png"); | |
println("Finished"); | |
} | |
void savePDF() { | |
println("Saving PDF image..."); | |
beginRecord(PDF, seed + "-vector.pdf"); | |
seededRender(); | |
endRecord(); | |
println("Finished"); | |
} |
Hey @order-of, I haven't tried this with p3d as I focus almost entirely on 2D output. It appears that the beginDraw/endDraw functions have issues with it, although I haven't been able to find any mention of this w.r.t. Processing. If you do dig into it and find a fix, please do consider pushing a patch.
Thanks, It hleps
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hey is there a way to use the saveHighRes function with p3d? changing renderer to p3d gives this error:
Framebuffer error (incomplete missing attachment), rendering will probably not work as expected Read http://wiki.processing.org/w/OpenGL_Issues for help.
OpenGL error 1286 at bot beginDraw(): invalid framebuffer operation
OpenGL error 1286 at top endDraw(): invalid framebuffer operation
OpenGL error 1286 at bot endDraw(): invalid framebuffer operation