You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模型中读取图片并转换为数组格式?

解决Django FileField图片转数组的问题

你直接打印Post.objects.all()[0].file得到的是文件的相对路径/文件名,因为Django的FileField返回的是File对象,默认字符串表示就是文件名。要把图片转成numpy数组,需要读取文件的实际内容,步骤如下:

方法一:通过文件路径读取

先获取图片的绝对路径,再用PIL打开并转数组:

from PIL import Image
import numpy as np
from django.conf import settings

post = Post.objects.all()[0]
if post.file:
    # 获取文件的绝对路径
    img_path = settings.MEDIA_ROOT / post.file.name
    # 打开图片并转成numpy数组
    img = Image.open(img_path)
    img_array = np.array(img)
    print(img_array)
else:
    print("该Post没有上传文件")

方法二:直接读取文件流

利用FileField的open()方法直接打开文件流,无需拼接路径:

from PIL import Image
import numpy as np

post = Post.objects.all()[0]
if post.file:
    # 打开文件流
    with post.file.open('rb') as f:
        img = Image.open(f)
        img_array = np.array(img)
        print(img_array)
else:
    print("该Post没有上传文件")

注意事项

  • 确保已经安装Pillow和numpy:pip install pillow numpy
  • 若上传的是视频,需用对应库(如cv2)读取,逻辑类似但依赖库不同
  • 必须判断post.file是否为空,避免触发空指针异常

内容的提问来源于stack exchange,提问作者Gaurav Kandel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:18