blob: c048d9bf11df8b4f7cea785dee850c2c639dbdfc (
plain) (
blame)
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
|
from io import BytesIO
import discord
from PIL import Image
from discord.ext import commands
class EightBitify(commands.Cog):
"""Make your avatar 8bit!"""
def __init__(self, bot: commands.Bot) -> None:
self.bot = bot
@staticmethod
def pixelate(image: Image) -> Image:
"""Takes an image and pixelates it."""
return image.resize((32, 32), resample=Image.NEAREST).resize((1024, 1024), resample=Image.NEAREST)
@staticmethod
def quantize(image: Image) -> Image:
"""Reduces colour palette to 256 colours."""
return image.quantize(colors=32)
@commands.command(name="8bitify")
async def eightbit_command(self, ctx: commands.Context) -> None:
"""Pixelates your avatar and changes the palette to an 8bit one."""
async with ctx.typing():
image_bytes = await ctx.author.avatar_url.read()
avatar = Image.open(BytesIO(image_bytes))
avatar = avatar.convert("RGBA").resize((1024, 1024))
eightbit = self.pixelate(avatar)
eightbit = self.quantize(eightbit)
bufferedio = BytesIO()
eightbit.save(bufferedio, format="PNG")
bufferedio.seek(0)
file = discord.File(bufferedio, filename="8bitavatar.png")
embed = discord.Embed(
title="Your 8-bit avatar",
description='Here is your avatar. I think it looks all cool and "retro"'
)
embed.set_image(url="attachment://8bitavatar.png")
embed.set_footer(text=f"Made by {ctx.author.display_name}", icon_url=ctx.author.avatar_url)
await ctx.send(file=file, embed=embed)
def setup(bot: commands.Bot) -> None:
"""Cog load."""
bot.add_cog(EightBitify(bot))
|