remotes/1693045480750635534/spooky-22
Aevann1 2022-01-25 01:40:34 +02:00
parent c26b0cc2d8
commit eb5bfcddee
5 changed files with 79 additions and 60 deletions

View File

@ -1,18 +1,10 @@
from PIL import Image as IImage, ImageSequence, ImageOps
from PIL import Image, ImageOps
from webptools import gifwebp
import time
import subprocess
def process_image(file=None, filename=None, resize=0):
def process_image(filename=None, resize=0):
if not filename: filename = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
try:
if file:
file.save(filename)
i = IImage.open(file)
else: i = IImage.open(filename)
except: return ""
i = Image.open(filename)
exif = i.getexif()
for k in exif.keys():
@ -22,21 +14,7 @@ def process_image(file=None, filename=None, resize=0):
i.info["exif"] = exif.tobytes()
if resize:
size = resize, resize
frames = ImageSequence.Iterator(i)
def thumbnails(frames):
for frame in frames:
thumbnail = frame.copy()
thumbnail.thumbnail(size)
yield thumbnail
frames = thumbnails(frames)
om = next(frames)
om.info = i.info
om = ImageOps.exif_transpose(om)
om.save(filename, format="WEBP", save_all=True, append_images=list(frames), loop=0, method=6, allow_mixed=True)
subprocess.call(['convert',filename,'-coalesce','-layers', 'TrimBounds','-resize', f'{resize}x>',filename])
elif i.format.lower() != "webp":
if i.format.lower() == "gif":
gifwebp(input_image=filename, output_image=filename, option="-mixed -metadata none -f 100 -mt -m 6")

View File

@ -10,6 +10,7 @@ from flask import *
from files.__main__ import app, limiter
from files.helpers.sanitize import filter_emojis_only
import requests
from shutil import copyfile
from json import loads
IMGUR_KEY = environ.get("IMGUR_KEY").strip()
@ -182,36 +183,49 @@ def api_comment(v):
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"]
if file.content_type.startswith('image/'):
image = process_image(file)
oldname = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(oldname)
image = process_image(oldname)
if image == "": return {"error":"Image upload failed"}
if v.admin_level == 3:
if parent_post.id == 37696:
filename = 'files/assets/images/Drama/sidebar/' + str(len(listdir('files/assets/images/Drama/sidebar'))+1) + '.webp'
text = process_image(file, filename, 400)
copyfile(oldname, filename)
process_image(filename, 400)
elif parent_post.id == 37697:
filename = 'files/assets/images/Drama/banners/' + str(len(listdir('files/assets/images/Drama/banners'))+1) + '.webp'
process_image(file, filename)
copyfile(oldname, filename)
process_image(filename)
elif parent_post.id == 37833:
try: badge_def = loads(body.lower())
except: return {"error": "You didn't follow the format retard"}, 500
name = badge_def["name"]
badge = g.db.query(BadgeDef).filter_by(name=name).first()
if not badge:
badge = BadgeDef(name=name, description=badge_def["description"])
g.db.add(badge)
g.db.flush()
filename = f'files/assets/images/badges/{badge.id}.webp'
process_image(file, filename, 200)
requests.post(f'https://api.cloudflare.com/client/v4/zones/{CF_ZONE}/purge_cache', headers=CF_HEADERS, data={'files': [f"https://{request.host}/static/assets/images/badges/{badge.id}.webp"]})
try:
badge_def = loads(body.lower())
name = badge_def["name"]
badge = g.db.query(BadgeDef).filter_by(name=name).first()
if not badge:
badge = BadgeDef(name=name, description=badge_def["description"])
g.db.add(badge)
g.db.flush()
filename = f'files/assets/images/badges/{badge.id}.webp'
copyfile(oldname, filename)
process_image(filename, 200)
requests.post(f'https://api.cloudflare.com/client/v4/zones/{CF_ZONE}/purge_cache', headers=CF_HEADERS, data={'files': [f"https://{request.host}/static/assets/images/badges/{badge.id}.webp"]})
except Exception as e:
print(e)
return {"error": "You didn't follow the format retard"}, 400
elif v.id in (CARP_ID,AEVANN_ID) and parent_post.id == 37838:
marsey = loads(body.lower())
name = marsey["name"]
if not g.db.query(Marsey.name).filter_by(name=name).first():
marsey = Marsey(name=marsey["name"], author_id=marsey["author_id"], tags=marsey["tags"], count=0)
g.db.add(marsey)
filename = f'files/assets/images/emojis/{name}.webp'
process_image(file, filename, 200)
requests.post(f'https://api.cloudflare.com/client/v4/zones/{CF_ZONE}/purge_cache', headers=CF_HEADERS, data={'files': [f"https://{request.host}/static/assets/images/emojis/{name}.webp"]})
try:
marsey = loads(body.lower())
name = marsey["name"]
if not g.db.query(Marsey.name).filter_by(name=name).first():
marsey = Marsey(name=marsey["name"], author_id=marsey["author_id"], tags=marsey["tags"], count=0)
g.db.add(marsey)
filename = f'files/assets/images/emojis/{name}.webp'
copyfile(oldname, filename)
process_image(filename, 200)
requests.post(f'https://api.cloudflare.com/client/v4/zones/{CF_ZONE}/purge_cache', headers=CF_HEADERS, data={'files': [f"https://{request.host}/static/assets/images/emojis/{name}.webp"]})
except Exception as e:
print(e)
return {"error": "You didn't follow the format retard"}, 400
body += f"\n\n![]({image})"
elif file.content_type.startswith('video/'):
file.save("video.mp4")
@ -676,7 +690,10 @@ def edit_comment(cid, v):
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"]
if file.content_type.startswith('image/'):
body += f"\n\n![]({process_image(file)})"
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
url = process_image(name)
body += f"\n\n![]({url})"
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f:

View File

@ -16,6 +16,7 @@ from .front import frontlist, changeloglist
from urllib.parse import ParseResult, urlunparse, urlparse, quote, unquote
from os import path
import requests
from shutil import copyfile
db = db_session()
marseys = tuple(f':#{x[0]}:' for x in db.query(Marsey.name).all())
@ -426,7 +427,10 @@ def edit_post(pid, v):
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"]
if file.content_type.startswith('image/'):
body += f"\n\n![]({process_image(file)})"
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
url = process_image(name)
body += f"\n\n![]({url})"
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f:
@ -652,7 +656,7 @@ def thumbnail_thread(pid):
for chunk in image_req.iter_content(1024):
file.write(chunk)
post.thumburl = process_image(filename=name, resize=100)
post.thumburl = process_image(name, resize=100)
db.add(post)
db.commit()
db.close()
@ -858,7 +862,9 @@ def submit_post(v):
if request.files.get("file2") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file2"]
if file.content_type.startswith('image/'):
body += f"\n\n![]({process_image(file)})"
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
body += f"\n\n![]({process_image(name)})"
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f:
@ -947,8 +953,13 @@ def submit_post(v):
file = request.files['file']
if file.content_type.startswith('image/'):
new_post.url = process_image(file)
new_post.thumburl = process_image(file, resize=100)
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
new_post.url = process_image(name)
name2 = name.replace('.webp', 'r.webp')
copyfile(name, name2)
new_post.thumburl = process_image(name2, resize=100)
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f:

View File

@ -11,6 +11,7 @@ from .front import frontlist
import os
from files.helpers.sanitize import filter_emojis_only
from files.helpers.discord import add_role
from shutil import copyfile
import requests
valid_username_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$")
@ -255,7 +256,10 @@ def settings_profile_post(v):
if request.files.get('file'):
file = request.files['file']
if file.content_type.startswith('image/'):
bio += f"\n\n![]({process_image(file)})"
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
url = process_image(name)
bio += f"\n\n![]({url})"
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f:
@ -621,11 +625,15 @@ def settings_images_profile(v):
file = request.files["profile"]
highres = process_image(file)
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
highres = process_image(name)
if not highres: abort(400)
imageurl = process_image(file, resize=100)
name2 = name.replace('.webp', 'r.webp')
copyfile(name, name2)
imageurl = process_image(name2, resize=100)
if not imageurl: abort(400)
@ -652,7 +660,9 @@ def settings_images_banner(v):
file = request.files["banner"]
bannerurl = process_image(file)
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
bannerurl = process_image(name)
if bannerurl:
if v.bannerurl and '/images/' in v.bannerurl : os.remove('/images/' + v.bannerurl.split('/images/')[1])

View File

@ -275,7 +275,10 @@ def submit_contact(v):
if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"]
if file.content_type.startswith('image/'):
body_html += f'<img data-bs-target="#expandImageModal" data-bs-toggle="modal" onclick="expandDesktopImage(this.src)" class="in-comment-image" src="{process_image(file)}" loading="lazy">'
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
file.save(name)
url = process_image(name)
body_html += f'<img data-bs-target="#expandImageModal" data-bs-toggle="modal" onclick="expandDesktopImage(this.src)" class="in-comment-image" src="{url}" loading="lazy">'
elif file.content_type.startswith('video/'):
file.save("video.mp4")
with open("video.mp4", 'rb') as f: