Skip to content

Instantly share code, notes, and snippets.

@bilgeonceken
Forked from peterkuma/server.py
Created December 20, 2016 16:40
Show Gist options
  • Save bilgeonceken/ae2a0e9c4619fb1ccd2677825a0de6be to your computer and use it in GitHub Desktop.
Save bilgeonceken/ae2a0e9c4619fb1ccd2677825a0de6be to your computer and use it in GitHub Desktop.

Revisions

  1. Peter Kuma created this gist Feb 10, 2014.
    100 changes: 100 additions & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,100 @@
    #!/bin/python

    import os
    from flask import Flask, Response, request, abort, render_template_string, send_from_directory
    import Image
    import StringIO

    app = Flask(__name__)

    WIDTH = 1000
    HEIGHT = 800

    TEMPLATE = '''
    <!DOCTYPE html>
    <html>
    <head>
    <title></title>
    <meta charset="utf-8" />
    <style>
    body {
    margin: 0;
    background-color: #333;
    }
    .image {
    display: block;
    margin: 2em auto;
    background-color: #444;
    box-shadow: 0 0 10px rgba(0,0,0,0.3);
    }
    img {
    display: block;
    }
    </style>
    <script src="https://code.jquery.com/jquery-1.10.2.min.js" charset="utf-8"></script>
    <script src="http://luis-almeida.github.io/unveil/jquery.unveil.min.js" charset="utf-8"></script>
    <script>
    $(document).ready(function() {
    $('img').unveil(1000);
    });
    </script>
    </head>
    <body>
    {% for image in images %}
    <a class="image" href="{{ image.src }}" style="width: {{ image.width }}px; height: {{ image.height }}px">
    <img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="{{ image.src }}?w={{ image.width }}&amp;h={{ image.height }}" width="{{ image.width }}" height="{{ image.height }}" />
    </a>
    {% endfor %}
    </body>
    '''

    @app.route('/<path:filename>')
    def image(filename):
    try:
    w = int(request.args['w'])
    h = int(request.args['h'])
    except (KeyError, ValueError):
    return send_from_directory('.', filename)

    try:
    im = Image.open(filename)
    im.thumbnail((w, h), Image.ANTIALIAS)
    io = StringIO.StringIO()
    im.save(io, format='JPEG')
    return Response(io.getvalue(), mimetype='image/jpeg')

    except IOError:
    abort(404)

    return send_from_directory('.', filename)

    @app.route('/')
    def index():
    images = []
    for root, dirs, files in os.walk('.'):
    for filename in [os.path.join(root, name) for name in files]:
    if not filename.endswith('.jpg'):
    continue
    im = Image.open(filename)
    w, h = im.size
    aspect = 1.0*w/h
    if aspect > 1.0*WIDTH/HEIGHT:
    width = min(w, WIDTH)
    height = width/aspect
    else:
    height = min(h, HEIGHT)
    width = height*aspect
    images.append({
    'width': int(width),
    'height': int(height),
    'src': filename
    })

    return render_template_string(TEMPLATE, **{
    'images': images
    })

    if __name__ == '__main__':
    app.run(debug=True, host='::')