import os import random import cv2 from flask import Flask, request, send_from_directory, render_template, jsonify, make_response from flask_uploads import UploadSet, configure_uploads, IMAGES, \ patch_request_class from output import out_path, web_path, file_name, direct_path from program import task app = Flask(__name__) app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd() + '\\static\\uploads' # 文件储存地址 photos = UploadSet('photos', IMAGES) configure_uploads(app, photos) patch_request_class(app) # 文件大小限制,默认为16MB # 存储的最开始的图片的名字 后面上传就会改变 photo_name = 'Tsunami_by_hokusai_19th_century.jpg' app.config['PHOTO_URL'] = os.getcwd() + '\\static\\uploads\\' + 'Tsunami_by_hokusai_19th_century.jpg' # 现在的图片的版本 app.config['cnt'] = 0 html = ''' Upload File

图片上传

''' pure_html = ''' Processed Image ''' # 主页面 @app.route('/upload_file', methods=['GET', 'POST']) def upload_file(): cnt = 0 del_all() if request.method == 'POST' and 'photo' in request.files: filename = photos.save(request.files['photo']) # app.name = filename app.photo_name = filename file_url = photos.url(filename) print(file_url) app.config['PHOTO_URL'] = os.getcwd() + '\\static\\uploads\\' + filename print(app.config['PHOTO_URL'] + 'photourl') img = cv2.imread(app.config['PHOTO_URL']) # 根据路径读取一张图片 cv2.imwrite(out_path(0), img) print(file_url) res = { 'code': 0, 'url_before': direct_path(app.config['cnt']) + '?' + str(random.random()), 'url_after': '' } print(res) return jsonify(res) res = { 'code': -1, 'url_before': '', 'url_after': '' } print(res) return jsonify(res) @app.route('/upload_style', methods=['GET', 'POST']) def upload_style(): cnt = 0 del_all() if request.method == 'POST' and 'photo' in request.files: filename = photos.save(request.files['photo']) # app.name = filename app.photo_name = filename file_url = photos.url(filename) print(file_url) app.config['PHOTO_URL'] = os.getcwd() + '\\static\\uploads\\' + filename print(app.config['PHOTO_URL'] + 'photourl') img = cv2.imread(app.config['PHOTO_URL']) # 根据路径读取一张图片 cv2.imwrite(out_path(0), img) print(file_url) cv2.imwrite('./img_src/styles/style0.jpg', img) res = { 'code': 0, } print(res) return jsonify(res) res = { 'code': -1, } print(res) return jsonify(res) # 删除uploads文件夹 (不用设置接口) @app.route('/delete_all') def del_all(): ls = os.listdir(app.config['UPLOADED_PHOTOS_DEST']) for i in ls: c_path = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], i) if os.path.isdir(c_path): del_file(c_path) else: os.remove(c_path) app.config['cnt'] = 0 # 用在delete_all里面,不用设置接口 (不用设置接口) @app.route('/delete_file/') def del_file(path): if os.path.exists(path): os.remove(path) # 通过commmand_id来选择处理的方式,commmand_id具体内容再program.py里面找 @app.route('/deal/', methods=['GET', 'POST']) def deal(command_id): img = cv2.imread(app.config['PHOTO_URL']) # 根据路径读取一张图片 res = { 'code': -1, 'url_before': '', 'url_after': '' } cmd = command_id if (cmd == 'b' or cmd == 'back'): # 撤销操作 if (app.config['cnt'] > 1): if os.path.exists(out_path(app.config['cnt'])): os.remove(out_path(app.config['cnt'])) print('back success') print(app.config['cnt']) app.config['cnt'] = app.config['cnt'] - 1 res = { 'code': 0, 'url_before': direct_path(app.config['cnt'] - 1) + '?' + str(random.random()), 'url_after': direct_path(app.config['cnt']) + '?' + str(random.random()) } elif (app.config['cnt'] == 1): res = { 'code': 0, 'url_before': direct_path(app.config['cnt'] - 1) + '?' + str(random.random()), 'url_after': '' } app.config['cnt'] = app.config['cnt'] - 1 elif (app.config['cnt'] == 0): res = { 'code': 1, 'url_before': direct_path(app.config['cnt'] - 1) + '?' + str(random.random()), 'url_after': '' } elif (cmd == 's' or cmd == 'save'): # 保存操作 cnt_max = app.config['cnt'] img = cv2.imread(out_path(app.config['cnt'])) cv2.imwrite(os.getcwd() + '\\static', img) cnt = 0 cv2.imwrite(out_path(cnt), img) for id in range(1, cnt_max + 1): if os.path.exists(out_path(id)): os.remove(out_path(id)) print('save success') else: # 图像处理操作 success = task(cmd, app.config['cnt']) if (success == 0): app.config['cnt'] = app.config['cnt'] + 1 res = { 'code': 0, 'url_before': direct_path(app.config['cnt'] - 1) + '?' + str(random.random()), 'url_after': direct_path(app.config['cnt']) + '?' + str(random.random()), } str_cnt = str(app.config['cnt']) print(type(str_cnt)) print(app.config['cnt']) return jsonify(res) # 这个download会下载最新的照片 @app.route('/download', methods=['POST', 'GET']) def download(): direct_path = os.getcwd() + '\\static\\uploads' # return send_from_directory(direct_path, file_name(app.config['cnt']), as_attachment=True) response = send_from_directory(direct_path, file_name(app.config['cnt']), as_attachment=True) response.headers["Access-Control-Expose-Headers"] = "Content-disposition" return response if __name__ == '__main__': app.run()