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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM