forked from YammiR6/Image-N
-
Notifications
You must be signed in to change notification settings - Fork 0
/
challenge.rb
92 lines (77 loc) · 2.12 KB
/
challenge.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
require 'models/example'
require 'chunky_png'
set :bind, '0.0.0.0'
class Challenge < Sinatra::Base
get '/challenge' do
what_to_hello = Example.new("World!")
content_type :json
status 200
headers ({})
body ({ hello: what_to_hello.to_s }.merge(params).to_json)
end
post '/fontChange' do
begin
body = JSON.parse(request.body.read)
data = Base64.decode64(body['encoded'])
png = ChunkyPNG::Image.from_string(data)
png.pixels.each_index do |i|
x = i % png.width
y = i / png.width
if png.pixels[i] == 255
png.pixels[i] = 0xff0000ff
end
end
File.open('fontChange.txt', 'w') do |f|
f.write(Base64.encode64(png.to_string))
end
status 200
content_type :json
headers ({})
body ({ encoded: Base64.encode64(png.to_string) }.to_json)
rescue => e
puts e
end
end
post '/inverse' do
begin
body = JSON.parse(request.body.read)
data = Base64.decode64(body['encoded'])
png = ChunkyPNG::Image.from_string(data)
png.pixels.each_index do |i|
color = png.pixels[i] >> 8
png.pixels[i] = ((0xffffff - color) << 8) | 255
end
File.open('inverse.txt', 'w') do |f|
f.write(Base64.encode64(png.to_string))
end
status 200
content_type :json
headers ({})
body ({ encoded: Base64.encode64(png.to_string) }.to_json)
rescue => e
puts e
end
end
post '/rotate' do
begin
body = JSON.parse(request.body.read)
data = Base64.decode64(body['encoded'])
png = ChunkyPNG::Image.from_string(data)
new_png = ChunkyPNG::Image.new(png.height, png.width)
png.pixels.each_index do |i|
x = i % png.width
y = i / png.width
new_png.set_pixel((png.height - y), x, png.pixels[i])
end
File.open('rotate.txt', 'w') do |f|
f.write(Base64.encode64(new_png.to_string))
end
status 200
content_type :json
headers ({})
body ({ encoded: Base64.encode64(new_png.to_string) }.to_json)
rescue => e
puts e
end
end
end