roundabout,
created on Friday, 14 February 2025, 20:39:26 (1739565566),
received on Friday, 14 February 2025, 20:39:34 (1739565574)
Author identity: vlad <vlad.muntoiu@gmail.com>
1d77373c7b9a4620da42fd798fee4e3824c9ded1
app.py
@@ -4,6 +4,8 @@ import mimetypes
import flask
import ruamel.yaml as yaml
import sqlalchemy.dialects.postgresql
from matplotlib.image import thumbnail
import config
import markdown
@@ -542,6 +544,9 @@ def upload_post():
file.save(path.join(config.DATA_PATH, "pictures", str(resource.id)))
pil_image = Image.open(path.join(config.DATA_PATH, "pictures", str(resource.id)))
resource.width, resource.height = pil_image.size
pil_image.thumbnail(config.THUMBNAIL_SIZE)
pil_image = pil_image.convert("RGB")
pil_image.save(path.join(config.DATA_PATH, "picture-thumbnails", str(resource.id)), **config.THUMBNAIL_SAVE_OPTIONS)
db.session.commit()
if flask.request.form.get("annotations"):
@@ -1310,6 +1315,25 @@ def raw_picture(id):
return response
@app.route("/raw/picture-thumbnail/<int:id>")
def raw_picture_thumbnail(id):
resource = db.session.get(PictureResource, id)
if resource is None:
flask.abort(404)
if not path.exists(path.join(config.DATA_PATH, "picture-thumbnails", str(resource.id))):
pil_image = Image.open(path.join(config.DATA_PATH, "pictures", str(resource.id)))
pil_image.thumbnail(config.THUMBNAIL_SIZE)
pil_image = pil_image.convert("RGB")
pil_image.save(path.join(config.DATA_PATH, "picture-thumbnails", str(resource.id)), **config.THUMBNAIL_SAVE_OPTIONS)
response = flask.send_from_directory(path.join(config.DATA_PATH, "picture-thumbnails"),
str(resource.id))
response.mimetype = resource.file_format
return response
@app.route("/object/")
def graphical_object_types():
return flask.render_template("object-types.html", objects=PictureObject.query.all())
@@ -1585,6 +1609,9 @@ def api_upload():
file.save(path.join(config.DATA_PATH, "pictures", str(resource.id)))
pil_image = Image.open(path.join(config.DATA_PATH, "pictures", str(resource.id)))
resource.width, resource.height = pil_image.size
pil_image.thumbnail(config.THUMBNAIL_SIZE)
pil_image = pil_image.convert("RGB")
pil_image.save(path.join(config.DATA_PATH, "picture-thumbnails", str(resource.id)), **config.THUMBNAIL_SAVE_OPTIONS)
db.session.commit()
if json_.get("annotations"):
config.py
@@ -8,3 +8,5 @@ DB_URI = f"postgresql://gigadata:{DB_PASSWORD}@localhost:5432/gigadata"
DATA_PATH = "./data"
ROOT_URL = "http://localhost:8080"
SITE_NAME = "Development site"
THUMBNAIL_SAVE_OPTIONS = {"format": "JPEG", "quality": 90}
THUMBNAIL_SIZE = (576, 576)
templates/small-annotation-display.html
@@ -1,6 +1,6 @@
{% macro annotation_display(resource) %}
<div class="annotation-zone">
<img src="/raw/picture/{{ resource.id }}" alt="{{ resource.title }}">
<img src="/raw/picture-thumbnail/{{ resource.id }}" alt="{{ resource.title }}">
{% for region in resource.regions %}
{% if region.json.type == "bbox" %}
<svg class="shape-container" viewBox="0 0 1 1" preserveAspectRatio="none">