用flask上传图片,裁剪并保存

打开pycharm,点击file,点击New Project:
在这里插入图片描述
点击flask,再如下图所示进行操作:
在这里插入图片描述

最上面的Location里面可以修改pycharm文件储存位置,并创建文件,操作完毕后,最后点右下角的Creat,结果如下:
在这里插入图片描述
接下来再在template下创建一个叫index的html文件,步骤如下;
在这里插入图片描述
效果如下:
在这里插入图片描述
接下来是代码操作了:
先在app.py里输入以下代码:

import os
from flask import Flask, render_template, request
from flask_script import Manager
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from flask_uploads import UploadSet, IMAGES, configure_uploads, patch_request_class
from flask_wtf.file import FileField, FileRequired, FileAllowed
from wtforms import SubmitField

# pip install pillow
from PIL import Image

app = Flask(__name__)
bootstrap = Bootstrap(app)
app.config['SECRET_KEY'] = 'ADFAD122DFDF'

app.config['MAX_CONTENT_LENGTH'] = 8 * 1024 * 1024
app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd()  # 存到跟这个文件一个目录下

photos = UploadSet('photos', IMAGES)  # 创建上传对象
configure_uploads(app, photos)  # 跟app 完成绑定
patch_request_class(app, size=None)  #

manager = Manager(app)


class UploadForm(FlaskForm):
    photo = FileField('头像上传', validators=[FileRequired('请选择头像'), FileAllowed(photos, message='只能上传图片')])
    submit = SubmitField('立即上传')


# 生成随机字符串
def random_string(length=16):
    import random
    base_str = '0987654321qwertyuiopasdfghjklzxcvbnm'
    return "".join(random.choice(base_str) for i in range(length))


@app.route('/', methods=['GET', 'POST'])
def hello_world():
    #将form实例化一个对象
    form = UploadForm()
    img_url = ''
    if form.validate():
        suffix = os.path.splitext(form.photo.data.filename)[1]  #获取文件名后缀
        filename = random_string() + suffix  #拼接成新文件名
        photos.save(form.photo.data, name=filename)   #保存文件
        # 文件保存成功以后我才设定缩略图

        path_name = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename)
        # 打开该图片
        image = Image.open(path_name)

        # 设定尺寸
        image.thumbnail((128, 128))

        new_filename = random_string() + '.min' + suffix   #设置新文件名
        # 3aa.min.jpg
        new_path_name = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], new_filename)
        # 保存
        image.save(new_path_name)

        img_url = photos.url(new_filename)  # 获取缩略图的地址
    return render_template('index.html', form=form, img_url=img_url)


if __name__ == '__main__':
    manager.run()

再在index.html里面输入以下代码:

{% extends 'bootstrap/base.html' %}



{% import 'bootstrap/wtf.html' as wtf %}


{% block content %}
    {% if img_url %}
        <img src="{{ img_url }}" alt="">
    {% endif %}
    <div class="container">


        {{ wtf.quick_form(form) }}
    </div>

{% endblock %}

哪个包没有就在Terminal里面安装哪个包
再点击pycharm左下角的Terminal,如图所示:
在这里插入图片描述
点击后输入以下内容:
python app.py runserver -d -r -p 8080
后面的8080是端口号,可以随便该成四个数字,运行结果如下,报错了:
在这里插入图片描述
解决方案如下:将鼠标移到app.py文件的第六行的flask_uploads上,按住ctrl键,点击鼠标左键,进入flask_uploads.py文件中,将其中两行代码修改成如下图所示:
在这里插入图片描述
再次运行即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值