亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python利用Flask動態(tài)生成漢字頭像

 更新時間:2023年01月09日 11:44:36   作者:夢想橡皮擦  
這篇文章主要為大家詳細介紹了Python如何利用Flask動態(tài)生成一個漢字頭像,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下

基礎(chǔ)環(huán)境配置

再 Python 的 Flask 框架中,我們使用 Python 的圖片處理庫(例如 Pillow)來生成一個漢字圖片。

首先看一個簡單的示例,然后再此基礎(chǔ)上,進行細節(jié)優(yōu)化。

提前安裝 PIL 模塊

pip install pillow

接下來的視圖函數(shù)和代碼框架,可參考爬蟲訓(xùn)練場系列博客中的任意一篇,這里橡皮擦在 app/apis 目錄的 index.py 文件中進行操作。

建立基礎(chǔ)代碼結(jié)構(gòu),如下所示:

@api.route('/avatars')
def index():

    # 生成隨機漢字
    def get_random_common_char():
        # 讀取文件中的常用漢字

        with open('demo.txt', 'r', encoding='utf-8') as f:
            common_chars = f.read()
            # 去除空格
            common_chars = common_chars.replace(' ', '')
            common_chars = common_chars.strip()

            # 創(chuàng)建字符映射表
            translator = {ord(c): None for c in common_chars if unicodedata.category(c).startswith('P')}

            # 使用字符映射表去除標(biāo)點符號
            s = common_chars.translate(translator)

        return random.choice(s)

	hanchar = get_random_char()

	# 生成圖片
    image = Image.new('RGB', (200, 200), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype('arial.ttf', 36)
    draw.text((50, 50), char, font=font, fill=(0, 0, 0))

    # 將圖片轉(zhuǎn)換為二進制數(shù)據(jù)
    image_binary = image.tobytes()

    # 設(shè)置響應(yīng)頭,返回圖片
    response = make_response(image_binary)
    response.headers['Content-Type'] = 'image/jpeg'
    return response

此時的代碼是不能正確返回圖片的,里面存在很多問題,需要一一進行修改。

加載本地 txt 文件,用于隨機生成漢字

第一個問題 demo.txt 被我放置在 static 文件夾中,直接讀取肯定是無法讀取到的,需要用到 os 庫。

# 獲取根目錄
app_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 拼接 static 文件夾路徑
static_path = os.path.join(app_root, 'static')

此時可以讀取本地字體文件,代碼如下所示:

os.path.join(static_path, 'demo.txt')

讀取完畢,根目錄變量 app_root 要放到內(nèi)部函數(shù)外,后續(xù)還要使用。

由于我們需要兩個漢字,所以使用最簡單的字符串拼接,準(zhǔn)備好 2 個漢字。

# 可以生成任意內(nèi)容
han_char1 = get_random_common_char()
han_char2 = get_random_common_char()
han_char = han_char1 + han_char2

Pillow 生成圖片

在 Flask 中生成圖片非常簡單,稍微麻煩的是直接將圖片以二進制流格式返回到前端。

圖片生成的代碼如下所示。

# 生成圖片
image = Image.new('RGB', (64, 64), (255, 255, 255))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(os.path.join(static_path, 'font/msyh.ttf'), 28)

上述代碼使用了 Image.new() 方法,其語法結(jié)構(gòu)如下所示。

Image.new(mode, size, color=0)

其各參數(shù)含義如下:

  • mode:圖像模式。例如:‘RGB’、‘RGBA’、‘L’ 等。
  • size:圖像大小,以像素為單位。例如:(800, 600)。
  • color:圖像背景色。例如:(255, 255, 255)。

這里加載了本地字體文件 msyh.ttf,后續(xù)大家可以去 GitCode 進行下載。

除此之外,為了達到最終效果,還需要繪制一個同心圓。

# 繪制一個圓形
# 正方形的中心坐標(biāo)
x = 32
y = 32
# 正方形的邊長
length = 64
# 計算半徑
r = length / 2
# 計算圓的左上角和右下角的坐標(biāo)
left = x - r
top = y - r
right = x + r
bottom = y + r
draw.ellipse((left, top, right, bottom), fill=(0, 129, 255))

繪制文字到圖片,注意調(diào)整居中參數(shù)。

draw.text((4, 12), han_char, font=font, fill=(255, 255, 255))

將圖片傳遞到前端

這里我們使用 io 庫的 BytesIO 類將圖像轉(zhuǎn)換成字節(jié)流,示例代碼如下所示。

# 將圖像轉(zhuǎn)換成字節(jié)流
buf = io.BytesIO()
image.save(buf, format='png')
buf.seek(0)

???????return send_file(buf, mimetype='image/png')

除此之外,還使用了 send_file() 函數(shù)將字節(jié)流返回到前臺。

運行完整代碼,在瀏覽器訪問指定接口,得到下述圖片。

基于該內(nèi)容,可以擴展更多參數(shù),由用戶自行配置,這里不再一一說明。

到此這篇關(guān)于Python利用Flask動態(tài)生成漢字頭像的文章就介紹到這了,更多相關(guān)Python Flask動態(tài)生成漢字頭像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3.6實現(xiàn)連接mysql或mariadb的方法分析

    Python3.6實現(xiàn)連接mysql或mariadb的方法分析

    這篇文章主要介紹了Python3.6實現(xiàn)連接mysql或mariadb的方法,結(jié)合實例形式分析了Python3.6針對mysql或mariadb數(shù)據(jù)庫操作的相關(guān)模塊安裝、數(shù)據(jù)庫與表的創(chuàng)建、數(shù)據(jù)庫連接等操作技巧與注意事項,需要的朋友可以參考下
    2018-05-05
  • Python實現(xiàn)簡單http服務(wù)器

    Python實現(xiàn)簡單http服務(wù)器

    這篇文章主要為大家詳細介紹了Python實現(xiàn)一個簡單http服務(wù)器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python 中判斷列表是否為空的方法

    Python 中判斷列表是否為空的方法

    這篇文章主要介紹了Python 中判斷列表是否為空的方法,本文通過代碼詳解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 詳解設(shè)計模式中的工廠方法模式在Python程序中的運用

    詳解設(shè)計模式中的工廠方法模式在Python程序中的運用

    這篇文章主要介紹了設(shè)計模式中的工廠方法模式在Python程序中的運用,工廠方法模式主張程序在設(shè)計時要可以根據(jù)不同的條件生成各種類的實例,需要的朋友可以參考下
    2016-03-03
  • 詳解pytorch 0.4.0遷移指南

    詳解pytorch 0.4.0遷移指南

    這篇文章主要介紹了詳解pytorch 0.4.0遷移指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Flask框架單例模式實現(xiàn)方法詳解

    Flask框架單例模式實現(xiàn)方法詳解

    這篇文章主要介紹了Flask框架單例模式實現(xiàn)方法,結(jié)合實例形式分析了flask框架單例模式的4種實現(xiàn)方式與相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Pytorch Tensor的統(tǒng)計屬性實例講解

    Pytorch Tensor的統(tǒng)計屬性實例講解

    今天小編就為大家分享一篇Pytorch Tensor的統(tǒng)計屬性實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中filter與lambda的結(jié)合使用詳解

    Python中filter與lambda的結(jié)合使用詳解

    今天小編就為大家分享一篇Python中filter與lambda的結(jié)合使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 如何用python開發(fā)Zeroc Ice應(yīng)用

    如何用python開發(fā)Zeroc Ice應(yīng)用

    這篇文章主要介紹了如何用python開發(fā)Zeroc Ice應(yīng)用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • 對Python3中列表乘以某一個數(shù)的示例詳解

    對Python3中列表乘以某一個數(shù)的示例詳解

    今天小編就為大家分享一篇對Python3中列表乘以某一個數(shù)的示例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論