forked from rDrama/rDrama
1
0
Fork 0
master
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 from webptools import gifwebp
import time import subprocess
def process_image(filename=None, resize=0):
def process_image(file=None, filename=None, resize=0):
if not filename: filename = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp' i = Image.open(filename)
try:
if file:
file.save(filename)
i = IImage.open(file)
else: i = IImage.open(filename)
except: return ""
exif = i.getexif() exif = i.getexif()
for k in exif.keys(): for k in exif.keys():
@ -22,21 +14,7 @@ def process_image(file=None, filename=None, resize=0):
i.info["exif"] = exif.tobytes() i.info["exif"] = exif.tobytes()
if resize: if resize:
size = resize, resize subprocess.call(['convert',filename,'-coalesce','-layers', 'TrimBounds','-resize', f'{resize}x>',filename])
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)
elif i.format.lower() != "webp": elif i.format.lower() != "webp":
if i.format.lower() == "gif": if i.format.lower() == "gif":
gifwebp(input_image=filename, output_image=filename, option="-mixed -metadata none -f 100 -mt -m 6") 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.__main__ import app, limiter
from files.helpers.sanitize import filter_emojis_only from files.helpers.sanitize import filter_emojis_only
import requests import requests
from shutil import copyfile
from json import loads from json import loads
IMGUR_KEY = environ.get("IMGUR_KEY").strip() 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": if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"] file=request.files["file"]
if file.content_type.startswith('image/'): 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 image == "": return {"error":"Image upload failed"}
if v.admin_level == 3: if v.admin_level == 3:
if parent_post.id == 37696: if parent_post.id == 37696:
filename = 'files/assets/images/Drama/sidebar/' + str(len(listdir('files/assets/images/Drama/sidebar'))+1) + '.webp' 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: elif parent_post.id == 37697:
filename = 'files/assets/images/Drama/banners/' + str(len(listdir('files/assets/images/Drama/banners'))+1) + '.webp' 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: elif parent_post.id == 37833:
try: badge_def = loads(body.lower()) try:
except: return {"error": "You didn't follow the format retard"}, 500 badge_def = loads(body.lower())
name = badge_def["name"] name = badge_def["name"]
badge = g.db.query(BadgeDef).filter_by(name=name).first() badge = g.db.query(BadgeDef).filter_by(name=name).first()
if not badge: if not badge:
badge = BadgeDef(name=name, description=badge_def["description"]) badge = BadgeDef(name=name, description=badge_def["description"])
g.db.add(badge) g.db.add(badge)
g.db.flush() g.db.flush()
filename = f'files/assets/images/badges/{badge.id}.webp' filename = f'files/assets/images/badges/{badge.id}.webp'
process_image(file, filename, 200) copyfile(oldname, filename)
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"]}) 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: elif v.id in (CARP_ID,AEVANN_ID) and parent_post.id == 37838:
marsey = loads(body.lower()) try:
name = marsey["name"] marsey = loads(body.lower())
if not g.db.query(Marsey.name).filter_by(name=name).first(): name = marsey["name"]
marsey = Marsey(name=marsey["name"], author_id=marsey["author_id"], tags=marsey["tags"], count=0) if not g.db.query(Marsey.name).filter_by(name=name).first():
g.db.add(marsey) marsey = Marsey(name=marsey["name"], author_id=marsey["author_id"], tags=marsey["tags"], count=0)
filename = f'files/assets/images/emojis/{name}.webp' g.db.add(marsey)
process_image(file, filename, 200) filename = f'files/assets/images/emojis/{name}.webp'
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"]}) 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})" body += f"\n\n![]({image})"
elif file.content_type.startswith('video/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") 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": if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"] file=request.files["file"]
if file.content_type.startswith('image/'): 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: 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 urllib.parse import ParseResult, urlunparse, urlparse, quote, unquote
from os import path from os import path
import requests import requests
from shutil import copyfile
db = db_session() db = db_session()
marseys = tuple(f':#{x[0]}:' for x in db.query(Marsey.name).all()) 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": if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"] file=request.files["file"]
if file.content_type.startswith('image/'): 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: with open("video.mp4", 'rb') as f:
@ -652,7 +656,7 @@ def thumbnail_thread(pid):
for chunk in image_req.iter_content(1024): for chunk in image_req.iter_content(1024):
file.write(chunk) file.write(chunk)
post.thumburl = process_image(filename=name, resize=100) post.thumburl = process_image(name, resize=100)
db.add(post) db.add(post)
db.commit() db.commit()
db.close() db.close()
@ -858,7 +862,9 @@ def submit_post(v):
if request.files.get("file2") and request.headers.get("cf-ipcountry") != "T1": if request.files.get("file2") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file2"] file=request.files["file2"]
if file.content_type.startswith('image/'): 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: with open("video.mp4", 'rb') as f:
@ -947,8 +953,13 @@ def submit_post(v):
file = request.files['file'] file = request.files['file']
if file.content_type.startswith('image/'): if file.content_type.startswith('image/'):
new_post.url = process_image(file) name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
new_post.thumburl = process_image(file, resize=100) 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: with open("video.mp4", 'rb') as f:

View File

@ -11,6 +11,7 @@ from .front import frontlist
import os import os
from files.helpers.sanitize import filter_emojis_only from files.helpers.sanitize import filter_emojis_only
from files.helpers.discord import add_role from files.helpers.discord import add_role
from shutil import copyfile
import requests import requests
valid_username_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$") 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'): if request.files.get('file'):
file = request.files['file'] file = request.files['file']
if file.content_type.startswith('image/'): 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: with open("video.mp4", 'rb') as f:
@ -621,11 +625,15 @@ def settings_images_profile(v):
file = request.files["profile"] 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) 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) if not imageurl: abort(400)
@ -652,7 +660,9 @@ def settings_images_banner(v):
file = request.files["banner"] 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 bannerurl:
if v.bannerurl and '/images/' in v.bannerurl : os.remove('/images/' + v.bannerurl.split('/images/')[1]) 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": if request.files.get("file") and request.headers.get("cf-ipcountry") != "T1":
file=request.files["file"] file=request.files["file"]
if file.content_type.startswith('image/'): 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/'): elif file.content_type.startswith('video/'):
file.save("video.mp4") file.save("video.mp4")
with open("video.mp4", 'rb') as f: with open("video.mp4", 'rb') as f: