Django Pillow

BBS項目數據設計python

數據庫設計:
		User
			-id
			-name
			-password
			-email
			-phone
			-avatar   用戶頭像
			-create_date    用戶註冊時間
			-blog
		Blog
			-id
			-title   #博客標題
			-site_name  #站點名稱
			-theme
		category(分類):   #一個站點能夠有多個分類,但分類只屬於建立分類那我的的站點
			-nid
			-title
			-blog   跟blog一對多
			
		tag:(文章關鍵字)
			-id
			-title
			-blog    跟blog一對多
			
		article
			-id
			-title
			-desc    摘要
			-create_time    auto_add_now:當該條記錄建立時,自動添加當前時間
			-content   文章內容
			
			-category    一對多  一個分類能夠有多個文章
			-tag         多對多   多個文章能夠有多個關鍵字
			-blog        一對多   一個博客站點能夠有多個文章
			
		commit(評論)
			-id
			-user     哪一個用戶 外鍵
			-article  對哪篇文章 外鍵
			-content   評論了什麼內容
			-commit_time  時間
			
			-parent_id  這個綁定commit 的id
			
			
       nid    user    article   content    parent_id
		
	1      1          1       111         null
	2      2          1       222         null
	3      3          1       333          1
	4      4          1       444          3
	5      3          1       555          4


		UpandDown(點贊數 反對數)
			-nid
			-user     哪一個用戶
			-article  對哪篇文章
			-is_up   點贊仍是點踩 

 Pillow

from django.shortcuts import render, HttpResponse
from PIL import Image,ImageDraw,ImageFont

import random
from io import BytesIO


def get_valid_code(request):
    # 第一種方式
    with open('static/img/lhf.jpg','rb') as f:
        # 圖片二進制
        data=f.read()
    return HttpResponse(data)

    # 第二種方式:隨機生成一張圖片
    # pip3 install Pillow
    # pillow 是一個圖形處理的模塊,功能很強強大
    # 生成一張圖片,第一個參數是模式:RGB,第二個參數是圖片大小,第三個參數是圖片顏色
    img = Image.new('RGB', (320, 35), color=get_random_color())
    # 保存到本地
    with open('valid_code.png', 'wb') as f:
        # 直接用img的save方法,第一個參數是空文件,第二個參數圖片格式
        img.save(f, 'png')
    # 打開文件,再返回
    with open('valid_code.png', 'rb') as f:
        data = f.read()
    return HttpResponse(data)

    #from io import BytesIO 
    #BytesIO 是在內存中生成空文件進行管理 能自動清理 速度更快

    # 第三種方式
    # 在內存中生成一個空文件(把它想象成 open('valid_code.png', 'wb') as f:)
    # 一個是在硬盤上,一個是在內存中
    img = Image.new('RGB', (320, 35), color=get_random_color())
    f = BytesIO()
    # 把圖片保存到f中
    # 放到內存中,存取比較快,並且有自動清理
    img.save(f, 'png')

    data = f.getvalue()
    return HttpResponse(data)


    # 第四種方式,在圖片上寫文字
    img = Image.new('RGB', (320, 35), color=get_random_color())
    # 拿到畫筆,把圖片傳入畫筆
    img_draw=ImageDraw.Draw(img)
    # 生成一個字體對象,第一個參數是字體文件的路徑,第二個參數是字體大小
    font=ImageFont.truetype('static/font/ss.TTF',size=25)

    # 第一個參數,xy的座標,第二個參數:要寫的文字,第三個參數:寫文字的顏色,第四個參數:字體
    # 不一樣的字體是不一樣的ttf文件
    img_draw.text((0,0),'python',get_random_color(),font=font)

    f = BytesIO()
    # 把圖片保存到f中
    # 放到內存中,存取比較快,並且有自動清理
    img.save(f, 'png')

    data = f.getvalue()
    return HttpResponse(data)    
相關文章
相關標籤/搜索