在Google Cloud Functions中使用PIL如何指定字体文件路径?
在Google Cloud Functions中用PIL指定字体路径的两种可行方案
方案一:把字体文件打包进部署包
把simsun.ttc直接放在你的Cloud Functions项目根目录(和主函数文件同层级),部署时这个文件会被一起上传到云端。
为了避免路径问题,推荐用os模块动态拼接路径,代码示例:
import os from PIL import Image, ImageDraw, ImageFont # 获取当前函数文件的目录路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接字体文件的完整路径 font_path = os.path.join(current_dir, "simsun.ttc") font = ImageFont.truetype(font_path, 18)
注意点:
- 检查
.gcloudignore文件,别把字体文件排除在外,不然部署时不会上传。 - 这种方式适合字体文件较小的情况,无需额外依赖云存储,函数冷启动更快。
方案二:从Cloud Storage下载到临时目录使用
Cloud Functions提供了/tmp临时存储空间(最大512MB),可以先把字体上传到Cloud Storage的bucket,函数执行时下载到/tmp再加载:
代码示例:
from PIL import Image, ImageDraw, ImageFont from google.cloud import storage import os storage_client = storage.Client() # 替换成你的bucket名称和字体在Storage里的路径 bucket = storage_client.get_bucket("your-bucket-name") font_blob = bucket.blob("fonts/simsun.ttc") # 下载到临时目录 temp_font_path = "/tmp/simsun.ttc" font_blob.download_to_filename(temp_font_path) # 加载字体 font = ImageFont.truetype(temp_font_path, 18)
注意点:
- 给Cloud Functions的服务账号配置读取该Storage bucket的权限(比如
storage.objects.get权限)。 - 临时目录的文件在函数执行结束后会被清理,冷启动时需要重新下载,适合字体文件较大或需要动态更换字体的场景。
内容的提问来源于stack exchange,提问作者april
相关产品推荐
相关产品推荐

