This is a simple port of https://github.com/sug0/go-glitch to rust.
You can think of the image as a functor that you map an expression to, for each pixel's component colors, returning a new one. The allowed operators are:
-
t
a pixel made up of a random color component from the neighboring 16 pixels -
g
a pixel made up of a random color component from random locations in the image -
r{Num}
a pixel made up of a random color component from the neighboringNum
pixels -
R{Num}
the red color component defined byNum
(i.e.R255
is the same asR
) -
G{Num}
the green color component defined byNum
(i.e.G255
is the same asG
) -
B{Num}
the blue color component defined byNum
(i.e.B255
is the same asB
) -
i
inverts the color component -
b{Num}
the brightness of the color component defined byNum
(i.e.b255
is the same asb
)
-
+
plus -
-
minus -
*
multiplication -
/
division -
%
modulo -
#
power of operator -
&
bit and -
|
bit or -
:
bit and not -
^
bit xor -
<
bit left shift -
>
bit right shift -
?
returns 255 if left side is greater otherwise 0 -
@
attributes a weight in the range[0, 255]
to the value on the left
The expressions are made up of operators, numbers, parenthesis, and a set of parameters:
-
c
the current value of each pixel component color -
b
the blurred version ofc
-
h
the horizontally flipped version ofc
-
v
the vertically flipped version ofc
-
d
the diagonally flipped version ofc
-
Y
the luminosity, or grayscale component of each pixel -
N
a noise pixel (i.e. a pixel where each component is a random value) -
R
the red color (i.e. rgb(255, 0, 0)) -
G
the green color (i.e. rgb(0, 255, 0)) -
B
the blue color (i.e. rgb(0, 0, 255)) -
s
the value of each pixel's last saved evaluated expression -
r
a pixel made up of a random color component from the neighboring 8 pixels -
e
the difference of all pixels in a box, creating an edge-like effect -
x
the current x coordinate being evaluated normalized in the range[0, 255]
-
y
the current y coordinate being evaluated normalized in the range[0, 255]
-
H
the highest valued color component in the neighboring 8 pixels -
L
the lowest valued color component in the neighboring 8 pixels
128 & (c - ((c - 150 + s) > 5 < s))
(c & (c ^ 55)) + 25
128 & (c + 255) : (s ^ (c ^ 255)) + 25