cx
This commit is contained in:
parent
0c68834084
commit
9e34724559
5 changed files with 79 additions and 60 deletions
|
@ -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")
|
||||||
|
|
|
@ -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"
|
body += f"\n\n"
|
||||||
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})"
|
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
|
||||||
|
file.save(name)
|
||||||
|
url = process_image(name)
|
||||||
|
body += f"\n\n"
|
||||||
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:
|
||||||
|
|
|
@ -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})"
|
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
|
||||||
|
file.save(name)
|
||||||
|
url = process_image(name)
|
||||||
|
body += f"\n\n"
|
||||||
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})"
|
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
|
||||||
|
file.save(name)
|
||||||
|
body += f"\n\n})"
|
||||||
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:
|
||||||
|
|
|
@ -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})"
|
name = f'/images/{time.time()}'.replace('.','')[:-5] + '.webp'
|
||||||
|
file.save(name)
|
||||||
|
url = process_image(name)
|
||||||
|
bio += f"\n\n"
|
||||||
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])
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue