123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """
- 数据集图片处理http接口
- """
- from flask import Blueprint, request, send_file
- from watermark_generate.domain import *
- from watermark_generate.tools import logger_tool
- from PIL import Image
- dataset = Blueprint('dataset', __name__)
- logger = logger_tool.logger
- # 允许的扩展名
- ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
- # 判断文件扩展名是否合法
- def allowed_file(filename):
- return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
- # 获取文件扩展名
- def get_file_extension(filename):
- return filename.rsplit('.', 1)[1].lower()
- @dataset.route('/znwr/jit/ai/v1/picture_embed', methods=['POST'])
- def picture_embed_label():
- """
- 上传图片,嵌入密码标签,进行处理、
- label: 密码标签
- file: 上传的图像
- :return: 成功:处理完成的图像二进制流 失败:{code: -1, msg:'错误信息'}
- """
- label = request.form.get('label')
- if 'file' not in request.files:
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=-1, msg='没有上传文件'))
- file = request.files['file']
- file_name = file.filename
- logger.debug(f'label: {label},upload_file_name: {file_name}')
- if file_name == '':
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=-1, msg='上传文件名为空'))
- if file and allowed_file(file_name):
- file_extension = get_file_extension(file_name)
- save_file_name = f'uploaded_image.{file_extension}'
- embed_file_name = f'embed_image.{file_extension}'
- file.save(save_file_name) # 保存图片到服务器
- # todo 修改图片嵌入水印流程
- # 在图片的任意位置添加随机数量和大小的噪声块
- img = Image.open(embed_file_name)
- # 保存修改后的图片
- img.save(embed_file_name)
- # 确定文件的MIME类型
- if file_extension == 'jpg' or file_extension == 'jpeg':
- mimetype = 'image/jpeg'
- elif file_extension == 'png':
- mimetype = 'image/png'
- else:
- # 如果无法确定文件类型,默认使用二进制流
- mimetype = 'application/octet-stream'
- return send_file(open(embed_file_name, 'rb'), mimetype=mimetype, download_name=embed_file_name)
- else:
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=-1, msg='文件类型不允许,只允许jpg,jpeg,png文件类型'))
- @dataset.route('/znwr/jit/ai/v1/picture_check', methods=['POST'])
- def picture_embed_check():
- """
- 图片嵌入水印功能自检
- :return: 自检结果
- """
- save_file_name = './resource/test.jpg'
- embed_file_name = './resource/test_embed.jpg'
- # todo 修改水印功能自检
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=0, msg='ok'))
- @dataset.route('/znwr/jit/ai/v1/picture_extract', methods=['POST'])
- def picture_embed_extract():
- """
- 图片水印提取
- :return: 提取结果
- """
- if 'file' not in request.files:
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=-1, msg='没有上传文件'))
- file = request.files['file']
- file_name = file.filename
- logger.debug(f'上传文件名称:{file_name}')
- if file_name == '':
- return VerifyLabelRespSchema().dump(VerifyLabelResp(code=-1, msg='上传文件名为空'))
- if file and allowed_file(file_name):
- file_extension = get_file_extension(file_name)
- save_file_name = f'extract_image.{file_extension}'
- file.save(save_file_name) # 保存图片到服务器
- # todo 修改水印提取功能
- return VerifyLabelRespSchema().dump(VerifyLabelRespSchema(code=-1, msg=f'文件格式不支持,仅支持jpg,jpeg,png格式'))
|