diff --git a/Dockerfile b/Dockerfile index e39b407..b04352d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ FROM python:3-stretch WORKDIR /var/www - +RUN apt-get update RUN apt-get -q update --fix-missing RUN apt-get -q install -y openslide-tools python-openslide vim +RUN apt-get -q install -y libvips libvips-dev +RUN pip install pyvips RUN pip install flask RUN pip install gunicorn RUN pip install greenlet diff --git a/SlideServer.py b/SlideServer.py index 3d15926..1c87915 100644 --- a/SlideServer.py +++ b/SlideServer.py @@ -5,6 +5,7 @@ import shutil import string import sys +import pyvips import flask import flask_cors @@ -48,6 +49,16 @@ def getThumbnail(filename, size=50): except BaseException as e: return {"type": "Openslide", "error": str(e)} +@app.route('/slide//pyramid/', methods=['POST']) +def makePyramid(filename, dest): + try: + filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) + destpath = os.path.join(app.config['UPLOAD_FOLDER'], dest) + pyvips.Image.new_from_file(filepath, access='sequential').tiffsave(destpath, tile=True, compression="lzw", tile_width=256, tile_height=256, pyramid=True, bigtiff=True, xres=0.254, yres=0.254) + return flask.Response(json.dumps({"status": "OK"}), status=200) + except BaseException as e: + return flask.Response(json.dumps({"type": "pyvips", "error": str(e)}), status=500) + # routes @@ -110,7 +121,7 @@ def finish_upload(token): else: return flask.Response(json.dumps({"error": "Token Not Recognised"}), status=400) else: - return flask.Response(json.dumps({"error": "Invalid filename"}), status=400) + return flask.Response(json.dumps({"error": "File with name '" + filename + "' already exists"}), status=400) else: return flask.Response(json.dumps({"error": "Invalid filename"}), status=400)