-
Notifications
You must be signed in to change notification settings - Fork 60
/
Copy pathwobble.rb
executable file
·36 lines (27 loc) · 1.04 KB
/
wobble.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/ruby
require "vips"
image = Vips::Image.new_from_file ARGV[0]
module Vips
class Image
def wobble
# this makes an image where pixel (0, 0) (at the top-left) has
# value [0, 0], and pixel (image.width - 1, image.height - 1) at the
# bottom-right has value [image.width - 1, image.height - 1]
index = Vips::Image.xyz width, height
# make a version with (0, 0) at the centre, negative values up
# and left, positive down and right
centre = index - [width / 2, height / 2]
# to polar space, so each pixel is now distance and angle in degrees
polar = centre.polar
# scale sin(distance) by 1/distance to make a wavey pattern
d = ((polar[0] * 3).sin * 10000) / (polar[0] + 1)
# and back to rectangular coordinates again to make a set of
# vectors we can apply to the original index image
index += d.bandjoin(polar[1]).rect
# finally, use our modified index image to distort!
mapim index
end
end
end
image = image.wobble
image.write_to_file ARGV[1]