Orux AI / 模型观察
FLUX.2 Pro 图片排版:用 Python 制作 A4 观察学习单
把 FLUX.2 Pro 已有狐狸案例排成 A4 学习单:保留完整方图,分开处理文字与插图,用实际 Python 导出核对尺寸、打印比例和复用成本。

文章目录
从实际拿到的图片出发设计页面
一张方形 FLUX.2 Pro 插图,可以在不拉伸动物、不让模型生成学习单文字的前提下,排成 A4 观察学习单。 把完整图片放进尺寸明确的正方形区域,单独排版问题,并标明图片由 AI 生成。本文使用 Orux 已有的雪地狐狸案例,交付一份真实生成、可以复现的版式,而不只是一条建议提示词。
这个场景面向准备视觉素养活动的教师:让学生描述看得见的细节,并区分观察与缺乏依据的推断。它不是动物学鉴定表,也不是动物出现记录。完成的页面为手写笔记留出空间,并追问插图无法证明什么。代码下载已有且获准使用的示例,在本地组装页面并保存完整分辨率 PNG,不会发起生图请求。

模型已有插图提供画面主体;学习单是用同一张图片制作的本地版式,不是另一份模型输出。
先看真实的 FLUX.2 Pro 狐狸案例
素材来自 Orux FLUX.2 Pro 模型页的 fox 示例。保存的生成输入为 resolution: "1K" 和 aspect_ratio: "1:1",原始提示词如下,保持原文:
Wildlife photograph of a red fox standing in fresh snow in a birch forest, soft snowflakes falling, warm rim light on its fur, shallow depth of field.
“photograph” 是生成请求中的用词,不代表输出记录了一只真实动物。已有结果是一张 AI 生成的 1,024 × 1,024 像素插图。本文复用保存的结果,没有新调用 FLUX.2 Pro。

FLUX.2 Pro 生成的原始公开狐狸案例。将这张 1,024 × 1,024 插图原样作为源素材复用,不把它当作野生动物实拍照片。
画面的构图会影响排版。狐狸头部位于动物身体的右上方,身体和尾巴向左下方延伸。雪地、柔化的树木背景和暖色边缘光,都能供学生观察。保留完整方图,可以留下尾巴、四肢与周围环境。为了铺满竖版页面而拉伸方图,会扭曲这些关系;直接紧裁成竖图,则会丢掉可以描述的环境信息。
如果要处理另一种版式任务——让图片铺满宽版和竖版网页头图,可以参考 Seedream 响应式裁切指南。本次学习单则保留完整方形源图。
课堂问题应该紧扣这些可见细节。“画面哪些部分让你联想到寒冷天气?”可以引导学生依据雪和所描绘的环境解释。“这张照片在哪里拍摄?”却暗示图片具有它并未提供的真实来源。不能只凭逼真的视觉效果,就推断地点、季节、相机设置或动物行为。
生图参数与纸张尺寸是两回事
2026 年 11 月 3 日核对的 Orux 公开表单,为这个 alias 仅提供 1K 分辨率与 1:1 比例。已有狐狸输出符合这个方形格式。下方生成的 2,480 × 3,508 像素学习单,是本地组装的页面,不是 FLUX.2 Pro 直接生成的 A4 图片。
Black Forest Labs 的原生尺寸文档介绍了更广泛的 FLUX.2 宽高控制。原生能力不能证明当前 Orux 表单也提供这些选项。本流程从实际可取得的方形结果出发,不依赖尚未验证的自定义尺寸参数。
页面采用 A4 标称 210 × 297 mm 的比例,W3C 页面尺寸参考也列出了这一规格。在每英寸 300 像素的页面网格上,四舍五入后得到 2,480 × 3,508 像素。插图占用 1,000 × 1,000 像素区域,标题和问题排在图外,因此可以在源代码中分别编辑图片与文字。
当文字必须准确时,这种拆分很有用。修正拼写、翻译内容或更换问题,只需修改本地版式,不必再次尝试生图。导出的 PNG 已经合并图层,所以应保留 Python 源码和原始素材作为可编辑母版,不要期待 PNG 本身含有独立文字图层。
完成的学习单具体包含什么
页面包含简短标题、完整方图、三个观察问题和五条笔记横线。可见图注标明图片为 AI 生成,并说明它不是野生动物记录。代码里的学习单标签为英文,预览也保留英文;本地化的文章图注会解释版式。若要制作另一种语言的学习单,应替换文字字符串,选择支持对应文字的字体,再次运行边界检查。
三个问题分别承担不同任务。“What can you see?”要求直接描述;“What suggests cold?”要求把结论与视觉线索联系起来;“What is uncertain?”提醒学生留意缺少的证据。参考答案应区分画面特征与真实世界断言:图中有类似积雪的地面,但不能因此得出实测温度或地理位置。
按标称打印比例,图片区宽约 84.67 mm。在这个宽度上,原图横向有 1,024 像素,有效源图密度为 307.2 像素/英寸。这与只在文件中写入“300 DPI”不同:元数据不会创造细节。如果把同一张源图铺到 180 mm 宽,有效源图密度会降至约 144.5 像素/英寸,无论页面元数据写什么。
307.2 这个数表示重采样前的源图像素预算。代码将 1,024 像素源图缩小到 1,000 像素区域,因此按标称页面比例,最终排版中的图片区本身为每英寸 300 像素。

实际本地导出的学习单,此处展示缩小后的网页预览。英文标签、三个问题和笔记横线位于保留完整内容的方形插图之外;图注明确说明图片为 AI 生成。
嵌入文章的页面只是缩小后的网页预览。运行代码,才能在本地生成完整 2,480 × 3,508 像素 PNG。本文没有做实体打印打样;打印对话框中的“适合页面”也可能改变实际比例。整班分发之前,应在自己的设备上检查纸张规格、打印机边距、对比度和书写空间。
费用比较:复用、一张新图与十张候选图
2026 年 11 月 3 日核对的 flux-2-pro 当前 Orux 公开默认单价为每图 2.67024 Credits。按当前配置 1 Credit = USD 0.005 换算,即每图 USD 0.0133512。本次实际复用的是保存的 1K 方形案例,没有假设其他分辨率的未核实价格。
| 流程选择 | 新增生图请求 | 计划中的 Orux 生图费用 | 改变什么 |
|---|---|---|---|
| 复用本次已有且获准使用的案例,在本地排版 | 0 | 增量 0 Credits(USD 0) | 学习单措辞、边距与版式 |
| 按当前公示单价生成一张新候选图 | 1 | 2.67024 Credits(USD 0.0133512) | 更换生成插图 |
| 按当前公示单价生成十张候选图 | 10 | 26.7024 Credits(USD 0.133512) | 增加待审图片,不保证得到十份可用学习单 |
左右滑动查看完整表格。
零费用这一行,只表示复用现有素材没有新增模型生图费用,不代表所有素材都可免费复用,也不代表软件、人工和打印没有成本。应使用获准复用的素材。另外两行是算术规划示例,不是本文已执行的请求、账户实时报价或成功率承诺。
需要把“换一张插图”与“调整一个页面”分开决策。扩大笔记区域属于排版问题;完全不同的姿势或场景则需要不同的源图。为了修正学习单标题而重新生成插图,只会引入费用与画面变化,没有解决文字排版本身的问题。以后接入付费调用前,应核对当前模型售价与 Orux API 文档。
用 Python 复现完整页面
使用 Python 3.9 或更高版本,并通过 python3 -m pip install "Pillow>=10.1" 安装 Pillow。将以下内容保存为 make_card.py,在可写目录中运行 python3 make_card.py。Pillow 文档说明了可缩放默认字体与图片保存方法。程序读取已有的公开 JPEG,在本地排版,不会访问生图端点,也不使用 API Key。
import hashlib
import io
import json
import urllib.request
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
URL = 'https://orux-ai.oss-cn-hongkong.aliyuncs.com/model-examples/9129330888225451304/b90f1d3428e4759fb18de8a1781769dc81ddfc45725a21d6982692c107812698.jpg'
SHA = 'b90f1d3428e4759fb18de8a1781769dc81ddfc45725a21d6982692c107812698'
OUT = Path('fox-card.png')
PAGE = (2480, 3508) # Rounded A4 pixel grid at 300 pixels per inch.
DPI = 300
BOX = (180, 550, 1000, 1000) # x, y, width, height; preserve full square.
def label(draw, xy, value, size, color='#17283b'):
font = ImageFont.load_default(size=size)
bounds = draw.textbbox(xy, value, font=font)
if bounds[0] < 0 or bounds[1] < 0 or bounds[2] > PAGE[0] - 120 or bounds[3] > PAGE[1] - 120:
raise ValueError('text exceeds safe page area')
draw.text(xy, value, font=font, fill=color)
return bounds
def main():
with urllib.request.urlopen(URL, timeout=30) as response:
data = response.read()
if hashlib.sha256(data).hexdigest() != SHA:
raise ValueError('source changed; inspect before reusing')
source = Image.open(io.BytesIO(data)).convert('RGB')
if source.size != (1024, 1024):
raise ValueError('unexpected source dimensions')
x, y, w, h = BOX
if w > source.width or h > source.height:
raise ValueError('layout would upscale source')
page = Image.new('RGB', PAGE, 'white')
draw = ImageDraw.Draw(page)
bounds = []
def write(xy, value, size, color='#17283b'):
bounds.append(label(draw, xy, value, size, color))
write((180, 180), 'LOOK CLOSELY', 112)
write((180, 340), 'Describe the image. Test your assumptions.', 56)
page.paste(source.resize((w, h), Image.Resampling.LANCZOS), (x, y))
write((1320, 580), 'VISIBLE CLUES', 60)
for i, line in enumerate(['1. What can you see?', '2. What suggests cold?', '3. What is uncertain?']):
write((1320, 740 + i * 210), line, 48)
write((180, 1650), 'AI-generated illustration | FLUX.2 Pro', 44, '#5b6470')
write((180, 1720), 'Not a wildlife record.', 44, '#5b6470')
write((180, 1940), 'OBSERVATION NOTES', 62)
for line_y in [2100, 2280, 2460, 2640, 2820]:
draw.line((180, line_y, 2300, line_y), fill='#bac4cd', width=3)
write((180, 3010), 'Name: __________________ Date: ______________', 46)
write((180, 3220), 'Example image: orux.top/models/flux-2-pro', 40, '#5b6470')
page.save(OUT, dpi=(DPI, DPI))
reopened = Image.open(OUT)
assert reopened.size == PAGE
assert abs(reopened.info['dpi'][0] - DPI) < 0.1
source_ppi = source.width / (w / DPI)
result = {'sourceSha256': SHA, 'sourceSize': source.size,
'pageSize': PAGE, 'storedDpi': reopened.info['dpi'],
'imageBox': BOX, 'displayWidthMm': w / DPI * 25.4,
'effectiveSourcePpi': source_ppi,
'sourceAspectPreserved': w / h == source.width / source.height,
'upscaled': False, 'textBoundsChecked': len(bounds),
'outputSha256': hashlib.sha256(OUT.read_bytes()).hexdigest()}
print(json.dumps(result, indent=2))
if __name__ == '__main__':
main()实际本地运行核对了 1,024 × 1,024 源图、2,480 × 3,508 导出尺寸、11 个文字边界、保持 1:1 的图片比例以及未发生放大。重新打开 PNG 后读取到约 299.9994 DPI,这是本次导出所保存元数据的舍入表示。图片区仍为横向 1,000 像素,对应前文的 84.67 mm 宽与每英寸 307.2 个源图像素。
源图哈希检查可以阻止同一 URL 下素材变化后,程序仍悄悄拿新图重建。出现不匹配时,应检查并批准替换素材,而不是删掉检查强行通过。边界检查只核对本页外侧安全区域,不会自动给译文换行、发现所有重叠或验证科学内容。字体和 Pillow 版本也可能改变呈现,所以编辑后仍要检查实际页面。
先审版式,再决定是否需要别的插图
先检查动物轮廓是否完整、问题是否可读,再看答题空间是否符合活动需要:简短描述适合横线笔记区,长篇作文就需要另一页。AI 图片说明也要按预定阅读尺寸检查,不能只在大屏桌面显示器上看。将原始提示词与源图随版式一起保存,让后续编辑者知道哪些内容来自模型。
如果需要让动物更大,放大之前先算清源图密度。如果问题需要更多空间,应先移动或缩短独立排版的文字,再考虑裁图。如果课程要讲授准确的解剖、栖息地或行为,应为这些断言选择经过审核的参考资料,而不是把生成插图当成证据。
完成的成品支持一项具体活动:观察图像,同时质疑它的证据边界。它不会把 FLUX.2 Pro 变成野外记录工具。合适的分工是:用模型已有插图提供视觉主体,用确定性的页面排版控制准确文字、尺寸和书写空间。
常见问题
A4 学习单是 FLUX.2 Pro 生成的吗?
不是。FLUX.2 Pro 生成了已有的方形狐狸插图,Python 则在本地组装 A4 大小页面、标签与书写区域。本次核对的 Orux 公开表单提供 1K 和 1:1,没有经过验证的 A4 生图设置。
写入 300 DPI 能让源图更清晰吗?
不能。DPI 元数据影响预期打印比例,不会增加真实源图细节。已有的 1,024 像素图片放进学习单标称 84.67 mm 宽的区域时,约能提供每英寸 307.2 个源图像素。
翻译问题时必须重新生图吗?
修改单独排版的问题,不需要新增生图。替换字符串,选择适合对应语言的字体,并检查新版版式即可。导出的 PNG 已合并图层,因此应保留可编辑代码与源图。
可以用这份学习单讲授真实狐狸的知识吗?
这份学习单支持视觉描述与不确定性讨论,不提供经过验证的动物学事实。图注已说明图片由 AI 生成。讲解解剖、栖息地或行为时,应使用经过审核的参考资料。
本文实际测试了哪些内容?
核对了本地页面导出、素材哈希、图片尺寸、文字边界、标称打印比例计算和价格乘法。没有新模型调用、图像质量基准、实体打印打样或课堂学习效果研究。
用一个 API 调用这些模型
一个 OpenAI 兼容 API,覆盖对话、图像、视频与音频模型,按积分计费。
相关文章
浏览全部文章 →
图像API价格比较:10款模型的1K、2K与4K费用
比较2026年10月29日所选10款Orux图像模型的每图与百图Credits费用,保留1K、2K、4K、参考图上限和历史耗时表。明确Google Standard与Batch差异、Alibaba地区价及Qwen Pro溢价,附统一Python示例,帮助按目标分辨率和可用成片成本选模型。

DeepSeek API价格:峰谷时段与Flash、Pro对比
核对DeepSeek V4.1 Flash与V4 Pro的官方和Orux积分价格,区分工作日、周末和中国节假日峰谷规则,计算每千次请求及一周平均成本。附Python调用、排程代码、真实中文文案复跑与缓存限制,明确旧最低收费记录和当前配置的区别,帮助你按自己的任务时间和验收标准选型。

Qwen Image 3.0 API:价格、Pro区别与Python
Qwen Image 3.0在Orux AI每图6 Credits,Pro从10.42起。对照Alibaba新加坡公开价、参考图费用与本站规格,保留Python示例和真实剪纸海报的逐项提示拆解,说明何时选标准版、Pro或Wan2.7 Image,并列出文字校对、成品尺寸与交付检查。

