zoukankan      html  css  js  c++  java
  • django实现图片上传后自动修改尺寸并保存修改后的图到数据库和本地文件系统

    图片上传首先要是设置settings.py文件(与静态文件设置类似)

    MEDIA_ROOT = os.path.join(BASE_DIR,'media')
    MEDIA_URL = '/media/'

    1、需要用到imagekit软件
    安装使用imagekit需要以下三步:
    1)Install PIL or Pillow. (If you’re using an ImageField in Django, you should have already done this.)
    2)pip install django-imagekit
    3)Add 'imagekit' to your INSTALLED_APPS list in your project’s settings.py

    2、编写models.py

    from django.db import models
    from imagekit.models import ProcessedImageField
    from imagekit.processors import ResizeToFill

    #上传图片后进行处理的
    class Profile(models.Model):
    avatar_thumbnail = ProcessedImageField(upload_to='uploaded', #图片上传后的目录会在主目录media(settings.py中设置)下自动创建
    processors=[ResizeToFill(100, 50)], #值可以改,现在是100*50的缩略图,也可以是360*300的放大图
    format='JPEG',
    options={'quality': 60},storage=ImageStorage())
    name = models.CharField(max_length=128)
    def __str__(self):
    return '%s' %(self.name)

    3、views实现

    #上传的图片经过处理后保存的
    @csrf_exempt
    def ProcessImg(request):
    if request.method == 'POST':
    if request.FILES.get('img'): #img为upload.html中的input标签名称
    new_img = models.Profile(
    avatar_thumbnail = request.FILES.get('img'),
    name = request.FILES.get('img').name
    )
    # new_img = models.Upload_img(
    # img = request.FILES.get('img'),
    # name = request.FILES.get('img').name
    # )
    type_list = ['.jpg','.png','.gif','.webp']
    #判断上传图片格式
    if os.path.splitext(new_img.name)[1].lower() in type_list:
    new_img.save()
    return render(request,'blog1/processupload.html')

    4、模板processupload.html(只写了上传功能的html代码)

    {% block content %}
    <form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input id="uploadimg" type="file" name="img" />
    <button type="submit" onclick="submit_successful()">上传</button>
    <p id="tip"></p>
    <script>

    function submit_successful()
    {
    var x = document.getElementById('uploadimg');
    if (x.value == ''){
    alert('上传失败,请选择要上传的图片!')

    }
    else
    {
    var AllowExt=['.jpg','.gif','.png','.webp'];
    <!-- 获取图片格式:.jpg,.png -->
    var FileExt=x.value.substr(x.value.lastIndexOf(".")).toLowerCase();
    <!-- 判断一个字符串是否在数组中 -->
    if (AllowExt.toString().indexOf(FileExt) > -1){

    alert('上传成功!!!');

    }
    else
    {
    alert('上传失败,上传文件格式为:(.jpg,.png,.gif,.webp),当前格式为:'+FileExt+'请重新上传!');
    }
    }


    }
    </script>
    </form>
    {% endblock %}
    5、urls.py中添加一条地址匹配

    path('processupload/',views.ProcessImg), #django2.0版本用path

    现在就可以去页面访问并测试上传图片功能了。

    这里只介绍了imagekit的一种使用方式,想了解更多可以参阅http://django-imagekit.readthedocs.io/en/latest/#specs。

    还有另一app可以修改图片,详情请参阅:http://easy-thumbnails.readthedocs.io/en/latest/usage/#python

  • 相关阅读:
    logging——日志——转载02
    logging——日志——转载03
    c# 整型数据与字符串 的之间互换(原创)
    收到邮件且自动发送到对方提供的邮箱
    学习了1!+...10!
    Outlook 2003 Add in 部署笔记
    学会了调用方法
    c# 属性的作用
    (转)软件的围城,谈高级语言的学习(一位架构师的忠告!)
    常用命令控制行
  • 原文地址:https://www.cnblogs.com/misswangxing/p/8670448.html
Copyright © 2011-2022 走看看