图像字节大小
更新时间:2026-09-14
简介
图像字节大小算子:只看文件字节数,不解码图像,逐行产出字节数,过滤交给 pipeline。
功能描述
image_src_type="image_url"且路径是本地路径(/或file://开头)时直接stat取st_size,不读文件内容- 远端路径(
bos:///s3:/// http(s))会把对象整个下载到临时目录后取字节长度 image_base64取 解码后 的字节数(等于原文件大小),不是 base64 字符串长度;image_binary取 bytes 长度- 全程不做图像解码,坏图/非图像文件也能算出字节数
- 单行失败(文件不存在、下载失败、输入类型与
image_src_type不匹配)打 exception 日志后该行填 None,不中断整批 - 一行一张图,逐行产出该图的字节数
算子参数
输入
| 输入 | 含义 |
|---|---|
| images | 图像输入列,内容形式由 image_src_type 决定(路径/URL 字符串、base64 字符串、bytes) |
输出
| 输出 | 含义 |
|---|---|
| image_size | int64,图像字节数。该行处理失败时为 None |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| image_src_type | str | "image_url" | 输入图像编码形式:image_url / image_base64 / image_binary,取值非法在初始化阶段抛 ValueError |
注意事项
- 本算子只产出统计字段,不做过滤。输出统一是字节数,
"5KB"/"1TB"这类带单位阈值的换算自己在 pipeline 里做。 - 输出的是文件大小,不是解码后的像素体积。要按分辨率筛就用
图像宽高(ImageShape)。 - 远端路径逐行下载整个对象,全量跑的开销与下载带宽相关;数据已在本地/挂载盘时才有「只 stat 不读内容」的快路径。
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.image.image_size import ImageSize
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18samples = {"image": ["bos://your-bucket/sample.jpg"]}
19 ds = daft.from_pydict(samples)
20 ds = ds.with_column(
21 "image_size",
22 aihc_udf(
23 ImageSize,
24 construct_args={"image_src_type": "image_url"},
25 num_cpus=1,
26 concurrency=4,
27 batch_size=64,
28 )(col("image")),
29 )
30 ds = ds.where(col("image_size") > 1024)
31 ds.show()
评价此篇文章
