Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys, os
- import cgi, cgitb
- import random
- import string
- from PIL import Image, ImageDraw, ImageFont, ImageFilter
- from StringIO import StringIO
- TERMINUS = ImageFont.load("terminus-bold.pil")
- WHITEMASK = lambda x, y: Image.new("L", (x, y), color=255)
- BLACKMASK = lambda x, y: Image.new("L", (x, y), color=0)
- ADDFILTER = ImageFilter.MaxFilter(4)
- RANDCHARS = string.ascii_letters + string.digits + "!@#$%^&*;',.?/\\"
- def matrix(cols, rows):
- show = [random.randint(128, 255) * (random.randint(0, 7) > 1) for i in range(cols)]
- last = [random.randint(1, 3) for i in range(cols)]
- glow = 0
- for i in range(rows):
- ret = []
- char = ""
- for j in range(cols):
- if show[j]:
- char = random.choice(RANDCHARS)
- else:
- char = " "
- if glow:
- show[j] = max(0, show[j] + random.randint(1250 / rows, 2250 / rows) )
- else:
- show[j] = max(0, show[j] - random.randint(4, last[j] * (400 / rows)) )
- show[j] = max(show[j], 0)
- glow = max(glow - 1, 0)
- if show[j] < 32 and not random.randint(0, 1500 / rows):
- glow = 4
- ret.append((char, show[j]))
- yield ret
- raise StopIteration
- def generateImage(width, height, font, alpha=128):
- bigwidth, bigheight = width * 2, height * 2
- fontwidth, fontheight = font.getsize(" ")
- ret = Image.new("RGBA", (bigwidth, bigheight), color=(0, 0, 0, alpha))
- ret1 = Image.new("RGBA", (bigwidth, bigheight), color=(192, 255, 192, 255))
- ret2 = Image.new("RGBA", (bigwidth, bigheight), color=(0, 255, 0, 255))
- mask = BLACKMASK(bigwidth, bigheight)
- canvas = ImageDraw.Draw(mask)
- for i, layer in enumerate(matrix(bigwidth / fontwidth, (bigheight / fontheight) + 2)):
- for j, (char, alpha) in enumerate(layer):
- canvas.text((2 + (fontwidth * j), 2 + (fontheight * i)), char, font=font, fill=alpha)
- blurred = mask.filter(ImageFilter.BLUR)
- ret1.putalpha(mask)
- ret2.putalpha(blurred)
- ret.paste(ret1, (0, 0), ret1)
- ret.paste(ret2, (0, 0), ret2)
- resized = ret.resize((width, height), Image.BICUBIC)
- return resized
- def norMain():
- img = generateImage(200, 200, TERMINUS)
- img.save("test.png")
- def cgiMain():
- form = {}
- cgiforms = cgi.FieldStorage()
- size = 100
- alpha = 128
- for val in cgiforms:
- form[val.lower()] = cgiforms[val].value
- if "alpha" in form:
- try:
- alpha = int(form["alpha"])
- except ValueError:
- pass
- if "size" in form:
- try:
- size = int(form["size"])
- except ValueError:
- pass
- size = max(50, size)
- size = min(size, 300)
- alpha = max(0, alpha)
- alpha = min(alpha, 255)
- output = StringIO()
- img = generateImage(size, size, TERMINUS, alpha)
- img.save(output, "PNG")
- print("Content-type: image/png\n")
- print(output.getvalue())
- if __name__ == "__main__":
- if "REMOTE_ADDR" in os.environ:
- cgitb.enable()
- cgiMain()
- else:
- norMain()
- norMain()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement