Python Sanic异步框架实现字体(.ttf)文件截取

Sanic框架实现字体文件截取。

功能:输入要截取的字体,将字体文件切割生成新的文件。

用三层思想搭建一个Sanic项目,利用框架的蓝图将项目分为model层,controller层。

1.启动服务主文件main.py。

# coding:utf-8
from sanic import Sanic
from controller import webapi


app = Sanic("SanicWebApi")
#接口蓝图
app.blueprint(webapi)
#配置运行参数
app.run(host='127.0.0.1', port=8080, access_log=False)

2.Controller层,新建一个controller包并新建入口文件

__init__.py
from sanic import Blueprint
from .webapi import api
#API接口路径
webapi = Blueprint.group(api,url_prefix="/api")

webApi.py

import uuid
from sanic import Blueprint, response
from sanic import json, text

from models import InterceptFont
from utility import ResponseResult

api = Blueprint("webapi")
# 请求入口 --controller
@api.route("/getFont")
async def interceptFont(request):
    text = request.args["inputText"][0]
    font_name = request.args["fontName"][0]
    font_tpyt = request.args["fontTypt"][0]
    return_font_name = request.args["returnFontName"][0]
    if return_font_name == "":
        return_font_name = str(uuid.uuid4())
    if font_name == "" or font_tpyt == "":
        return json(ResponseResult.Error([],"字体名称或字体类型不可为空!"))
    fontpath = InterceptFont(text,font_name,font_tpyt,return_font_name)

    return await response.file_stream(
        fontpath,
        chunk_size = 1024,
        filename = return_font_name+font_tpyt,
        headers={'X-Serverd-By': 'YuanRenXue Python'}
    )

3.Models层,新建一个models包

__init__.py

from .InterceptFontPackage import InterceptFont
interceptFontPackage.py

from fontTools import subset
from utility import readconfig

def InterceptFont(text,fontName,fontType,retName):
    # 字体拆分
    options = subset.Options()
    con = readconfig.ReadConfig()
    item = con.getConfigValue("config","font_file_path")
    path = str(item).rstrip()+fontName
    font = subset.load_font(path, options)
    subsetter = subset.Subsetter(options)
    subsetter.populate(text=text)
    subsetter.subset(font)
    # woff
    options.flavor = 'woff'
    font_path = 'fonts/'+retName+fontType
    subset.save_font(font,font_path , options)
    return font_path

4.返回状态封装

ResponseResult.py
import json


class ResponseResult:
    def __init__(self):
        self.status = 200
        self.msg = "成功!"
        self.response = []
        self.success = False
        
    def Success(self, response=[], msg="成功!"):
        data = {"status": self.status, "msg": msg, "success": True, "response": response}
        return data

    def Error(self, response=[], msg="失败!"):
        self.status = -1
        data = {"status": self.status, "msg": msg, "success": False, "response": response}
        return data

PS:简简单单的一个小功能,我也是刚用Sanic框架。不足之处,谅解谅解。。

这里学的超详细的API说明:

Sanic框架初识 - 猿人学Sanic 既是一个Python web 服务器,又是一个web框架,它为速度而生。Sanic只支持Python 3.5及其以上版本,允许我们使用async/await语法来使我们的代码非阻塞且快速。https://www.yuanrenxue.com/sanic/sanic-start.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值