Skip to content

Instantly share code, notes, and snippets.

@NotSoSuper
Created February 21, 2017 05:08
Show Gist options
  • Save NotSoSuper/2b11fd687b1c24c4d352653e9a920848 to your computer and use it in GitHub Desktop.
Save NotSoSuper/2b11fd687b1c24c4d352653e9a920848 to your computer and use it in GitHub Desktop.
def do_gmagik(self, ctx, gif):
try:
try:
gif = PIL.Image.open(gif)
except:
return '\N{WARNING SIGN} Invalid Gif.'
if gif.size >= (3000, 3000):
return '\N{WARNING SIGN} `GIF resolution exceeds maximum >= (3000, 3000).`'
elif gif.n_frames > 150 and ctx.message.author.id != self.bot.owner.id:
return "\N{WARNING SIGN} `GIF has too many frames (> 150 Frames).`"
count = 0
frames = []
while gif:
b = BytesIO()
try:
gif.save(b, 'GIF')
except:
continue
b.seek(0)
frames.append(b)
count += 1
try:
gif.seek(count)
except EOFError:
break
imgs2 = []
for image in frames:
try:
im = wand.image.Image(file=image)
except:
continue
i = im.clone()
i.transform(resize='800x800>')
i.liquid_rescale(width=int(i.width*0.5), height=int(i.height*0.5), delta_x=1, rigidity=0)
i.liquid_rescale(width=int(i.width*1.5), height=int(i.height*1.5), delta_x=2, rigidity=0)
i.resize(i.width, i.height)
b = BytesIO()
i.save(file=b)
b.seek(0)
imgs2.append(b)
imgs2 = [PIL.Image.open(i) for i in imgs2]
final = BytesIO()
i = imgs2[0].save(final, 'GIF', loop=0, save_all=True, append_images=imgs2)
final.seek(0)
return final
except Exception as e:
return f'{str(e)} {e.__traceback__.tb_lineno}'
async def do_gmagik2(self, url):
path = self.files_path(self.bot.random(True))
await self.download(url, path)
args = ['convert', '(', path, '-resize', '256x256>', '-resize', '256x256<', ')']
i = 5
while i <= 70:
args.extend(['(', '-clone', '0', '(', '+clone', '-liquid-rescale', '{0}%'.format(int(100-i)), ')', '(', '+clone', '-resize', '256', ')', '-delete', '-2', '-delete', '-2', ')'])
i += 5
args.extend(['-delay', '8', '-set', 'delay', '8', 'gif:-'])
final = await self.bot.run_process(args, b=True)
return path, final
@commands.command(pass_context=True, aliases=['gmagick'])
@commands.cooldown(1, 10, commands.BucketType.server)
async def gmagik(self, ctx, url:str=None):
try:
x = await self.bot.say("ok, processing (this might take a while)")
get_images = await self.get_images(ctx, urls=url, limit=1, gif=True, msg=False)
if not get_images:
get_images = await self.get_images(ctx, urls=url, limit=2)
if get_images:
url = get_images[0]
if self.get_switch('gmagik2'):
final = await self.generic_api('gmagik2', url)
if isinstance(final, str):
return await self.bot.say(final)
else:
path, final = await self.do_gmagik2(url)
os.remove(path)
await self.bot.upload(final, filename='gmagik.gif')
else:
ctx.command.reset_cooldown(ctx)
return
else:
url = get_images[0]
if self.get_switch(ctx.command.name):
final = await self.g_api(url, ctx.message.author.id, 'gmagik')
if not final:
return await self.bot.say('\N{WARNING SIGN} **Command download function failed...**')
else:
b = await self.bytes_download(url)
if sys.getsizeof(b) > 6500000 and ctx.message.author.id != self.bot.owner.id:
return await self.bot.say("\N{NO ENTRY} `GIF Too Large (> 6.5 mb).`")
final = await self.bot.loop.run_in_executor(None, self.do_gmagik, ctx, b)
if isinstance(final, str):
return await self.bot.say(final)
await self.bot.upload(final, filename='gmagik.gif')
except Exception as e:
await self.bot.say(code.format(e))
raise
finally:
await self.bot.delete_message(x)
@Commandtechno
Copy link

this is very pogchamp thank you kind sir

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment