colorillusion.frink

Download or view colorillusion.frink in plain text format

``` use Writer.frink // This program generates color illusions like this: // http://www.johnsadowski.com/big_spanish_castle.php inputURL = "file:DSC_0077.JPG" img_in = new image[inputURL] // Get file part of URL to use for output files. origFile = urlFile[inputURL] greyFile = origFile greyFile =~  %s/(.*)\.\w+\$/\$1grey.jpg/ colorFile = origFile colorFile =~ %s/(.*)\.\w+\$/\$1colors.jpg/ htmlFile = origFile htmlFile  =~ %s/(.*)\.\w+\$/\$1.html/ Width = img_in.getWidth[] Height = img_in.getHeight[] reverseImg = new image[Width, Height] greyImg = new image[Width, Height] for w = 0 to Width-1 {    for h = 0 to Height-1    {       [r,g,b] = img_in.getPixel[w, h]       // This converts to YUV space using the BT. 709 definition used in       // HDTV.  See http://en.wikipedia.org/wiki/YUV       y =  0.2126  r + 0.7152  g + 0.0722  b       u = -0.09991 r - 0.33609 g + 0.436   b       v =  0.615   r - 0.55861 g - 0.05639 b       // Write out the grayscale levels.       greyImg.setPixel[w, h, y, y, y]       // Now we're going the throw away the Y (luminance) component       // and replace it with a constant 0.5.  Then we're going to go back to       // RGB space and reverse the colors.  We could simplify these equations       // but it's kinda nice to see them in this form.       y = 0.5       r = y +       0 u + 1.28033 v       g = y - 0.21482 u - 0.38059 v       b = y + 2.12798 u -       0 v       reverseImg.setPixel[w, h, 1-r, 1-g, 1-b]    } } g = new graphics g.fitCenter[reverseImg, 0, 0, 1, 1] g.drawEllipseCenter[0,0,0.005, 0.005] //win = g.show[Width, Height] g.write[colorFile, Width, Height] g1 = new graphics g1.fitCenter[greyImg, 0, 0, 1, 1] g1.drawEllipseCenter[0,0,0.005, 0.005] g1.write[greyFile, Width, Height] // Render an interactive HTML file println["htmlFile is \$htmlFile"] html = new Writer[htmlFile] html.write["""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3.org/TR/html4/loose.dtd"> <HTML LANG="en">  <HEAD>   <TITLE>\$htmlFile</TITLE>  </HEAD>  <BODY>   <CENTER>    <P>     Stare at the dot for 30 seconds, then move your mouse over the image.    </P>    <P>    <IMG NAME="i1" SRC="\$colorFile" onMouseOver="document.i1.src='\$greyFile'" onMouseOut="document.i1.src='\$colorFile'">    </P>   </CENTER>  </BODY> </HTML>"""] html.close[] println["Interactive file rendered to \$htmlFile"] // Start the interactive HTML file in the browser. browse[htmlFile] /*for i = 1 to 10 {    win.replaceGraphics[g1]    sleep[5 s]    win.replaceGraphics[g]    sleep[30 s] }*/ ```

Download or view colorillusion.frink in plain text format

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19305 days, 18 hours, 18 minutes ago.