ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

钻石画排钻助手怎么做?从像素化到色号匹配的工程链路

2026/9/7 8:36:48 拓冰建站 浏览量
钻石画排钻助手怎么做?从像素化到色号匹配的工程链路 做钻石画和珍珠画订单的人多数都卡在同一个环节客户发来一张普通图片你要把它变成一张能照着贴钻的钻位图。传统的做法是把图片丢进通用 AI 工作流里先放大、再抠图、再像素化最后人工手动对色号。这套流程不是不能用而是中间环节太多每多一步就多一次出错的机会。尤其到了义乌这种走量、走跨境订单的地方一天处理几十张图问题就变成了到底能不能一张图进来直接出带色号的排钻模板这篇文章想聊的就是这类“排钻助手”“珍珠画软件”背后的工程逻辑。标题里那句很张扬的话——“比 AI 工作流还快”——真正值得拆解的并不是哪个工具跑分更高而是专用工具如何在确定性任务上用行业规则换掉通用 AI 的试错成本。我会结合珍珠钻石画 5.0 发布的行业背景把珍珠画/钻石画排钻的核心流程、代码原型、常见坑和工程建议一次讲清楚。如果你正在做跨境钻石画、珍珠画或者你想自己开发一个排钻工具/插件这篇文章能帮你建立一条完整的技术链路从原图到像素化从像素化到色号匹配从色号匹配到可交付的钻位模板。读完以后你至少能跑通一个最小可用的排钻程序并且知道为什么有些图快、有些图慢为什么有些图排出来颜色很脏有些图排出来能直接进车间。1. 这篇文章真正要解决的问题先说一下钻石画和珍珠画的排钻在做什么。钻石画Diamond Painting本质上是一种数字填色手工制品。画布上印着数字编号每个格子对应一颗树脂钻玩家把对应编号的钻一颗一颗贴上去。珍珠画思路类似只是把钻换成了珍珠。它们的共同点是一切信息都来自那张“带编号的网格图”。网格图画得准不准、色号对不对直接决定成品效果。问题就出在“图怎么来”上。以前工厂的做法很原始找美工一张一张用 Photoshop 处理先马赛克化再人工把每个颜色换成最接近的色号最后再排版导出。这个流程依赖熟练工一张图少说半小时复杂图一两个小时。换到跨境电商场景客户要的是“今天给图明早要排钻模板”人力根本跟不上。然后大家开始用 AI 工作流。市面上的通用方案通常是用 AI 放大原图补充细节用抠图模型去掉复杂背景用像素化脚本把图片网格化用脚本把每个格子颜色映射到钻色色板人工打开结果图逐个区域确认色号没偏差导出打印模板。这套方案灵活什么图都能处理但它最大的问题不是“模型不够强”而是环节多带来的不确定性。前置模型换一个版本色准就可能变抠图边缘多留了 2 个像素整体轮廓就歪人工校对又变回了瓶颈。专用排钻软件走了另一条路。它不需要“理解”画面只需要把行业规则固化进流程图片输入后按固定画布尺寸采样按企业色板做最近邻匹配按固定网格生成模板然后批量导出。速度快的原因并不是用了多么高级的模型而是砍掉了所有不产生直接价值的中间环节。所以本文要解决的问题可以概括成三句话帮你看懂排钻软件处理一张图的内部过程给你一个完整的最小代码实现让你在本地也能跑通同样的链路告诉你这种“行业专用工具”和“通用 AI 工作流”各自的适用边界避免你选错方案。2. 珍珠画排钻的核心概念与工作原理在继续往下写之前先把几个高频概念说清楚。很多新手在群里问“为什么排出来效果不像原图”本质上就是没理解这几个概念之间的关系。2.1 核心概念速查概念说明在排钻流程中的作用原图客户提供的普通图片可能是 JPG、PNG排钻的唯一输入质量直接影响结果网格化把图片按行列切成一个个小格子每个格子最终对应一颗钻/珍珠像素化每个小格子取平均颜色或主色把连续图像变成色块模拟钻石画效果色板工厂实际拥有的钻/珍珠色号集合排钻时必须把颜色映射到色板无法匹配的颜色会被替换色号匹配把采样色换算成最近的色板色号决定了最终成品的色准钻位模板包含每个格子坐标和色号的输出文件工厂打印或导入施钻设备的关键文件异形钻石画非矩形轮廓的钻石画如心形、方形、星形普通网格对异形图不适用需要蒙版处理2.2 工作原理一句话概括排钻的本质是把一张连续图像降采样成一堆离散色块再把离散色块映射到某个固定色板上。不要把它想得太玄。你打开一张照片把照片缩小到很模糊你会看到画面变成了一堆马赛克。马赛克的每个格子取一个代表色再把代表色换成离它最近的工厂钻色编号这就是排钻。这里有一个新手非常容易误解的地方排钻软件并不追求“100%还原原图”它追求的是**“在色板约束下尽量接近原图的观感”**。工厂只有 30 个颜色的钻你非要让软件输出 200 种颜色那最后成本、备货、贴钻都会出问题。所以排钻过程和压缩算法有点像本质上是带约束的有损转换。2.3 珍珠钻石画 5.0 的版本信号从行业动向看这次“珍珠钻石画 5.0”发布的重点仍然是“更快”。版本号从 1.0 走到 5.0核心变化基本都集中在这几块图像识别更稳定、批量处理更成熟、色板管理更规范、和工厂模板的兼容性更好。也就是说软件越来越像一个**“行业专用格式转换器”**而不是一个需要你反复调参的图形工具。这也解释了为什么标题能用“比 AI 工作流还快”做比较通用方案每一步都要人在中间确认专用软件则是把一批图扔进去等它全部输出。但这个“快”的代价是灵活性下降。如果你要处理的图是精修过的插画、带复杂光影的照片或者客户对颜色要求极其苛刻专用软件反而不如你手动搭建的半自动 AI 工作流。这一点在后面第 3 章会详细对比。3. 排钻助手与传统 AI 工作流的效率对比很多人看到“比 AI 工作流还快”的第一反应是凭什么通用 AI 不是能自动扣图、自动增强画质吗专用软件真的做得更好吗其实两者的快是不同层面的快。3.1 流程长度对比环节通用 AI 工作流排钻助手类软件图片预处理需要人工判断是否放大、是否抠图软件按默认参数自动处理像素化需要单独脚本或插件内置在流程中色号匹配需要结合工厂色板配置软件内置色板并支持导入外部色板人工校对几乎每次都要做抽检几处关键位置即可批量导出通常要写批处理脚本软件原生支持通用 AI 工作流的每一步单拎出来都很强但串起来以后瓶颈在“环节之间的连接”上。AI 放大完的图要给像素化脚本像素化脚本输出的色块图要给色号匹配脚本每个环节的数据格式可能都不一样每转一次就可能损失一点信息。到了一天处理几十张图的量级这种摩擦成本会被无限放大。排钻助手类软件把所有环节压缩成了一个操作导入、设置网格、选色板、导出。它牺牲了“万能”换来了“确定”。模板格式是固定的色号库是固定的输出结构是固定的。这就像坐专线和挤公交的差别专线只到工厂但快、准、不用换乘公交哪里都能去走走停停还容易坐过站。3.2 适用场景判断产品图/纯色背景图适合排钻助手直接用速度快输出稳定。带复杂背景的生活照/插画更适合 AI 工作流先抠图、再增强因为不确定背景会不会被错误地转成钻位。小批量、高要求订单建议人工参与先用 AI 工作流跑出候选模板再人工微调。大批量、标准化订单毫不犹豫选专用软件人力成本差一个数量级。从技术视角看这不是谁替代谁的问题而是“专用工具的确定性”和“通用工具的灵活性”之间的取舍。排钻助手用一套固定规则应对 90% 的常见图剩下 10% 的疑难杂图仍然需要回到 AI 工作流里做特例处理。4. 环境准备与前置条件如果只想用现成的珍珠画软件环境准备很简单安装软件、导入色板、导入图片、点导出。但如果你想理解排钻原理或者想自己写一个内部的排钻小工具那我们可以用 Python 搭一个最小原型。本文代码以通用图像处理链路为准版本细节请以你的实际环境为准。我用到的核心库是 OpenCV、NumPy 和 Pillow三件套几乎覆盖了所有图像预处理需求。4.1 安装依赖# 建议使用 Python 3.8 及以上版本 pip install opencv-python numpy pillow如果需要处理批量文件建议安装 pandas 来管理输出清单。这不是必须看个人习惯。pip install pandas校验环境是否正常可以执行python -c import cv2, numpy, PIL; print(环境OK)输出环境OK就说明依赖没问题。4.2 输入图片要求排钻效果 70% 由输入图片决定软件只能负责剩下 30%。图片分辨率不用太高越高的分辨率在网格化后反而越难取舍细节背景尽量做干净纯色或浅色背景优先背景复杂要先抠图颜色偏差大的图片先做白平衡避免偏色被放大到整张模板不要直接使用无版权的商用插图涉及设计师作品要确认授权。5. 排钻助手的核心流程拆解一个完整的排钻流程可以拆成 5 步。这个流程无论你用什么软件底层逻辑都是相通的。5.1 图像预处理原图进入程序后的第一件事不是立即网格化而是先做标准化。具体操作包括统一尺寸、去除高光噪点、可选的中值滤波、Gamma 校正。目的只有一个让后续采样阶段拿到更稳定的颜色值。直接对一张偏暗的照片做排钻最后出来的模板整体都会偏暗因为软件只会机械地取网格平均色它不会像人眼一样自动补偿亮度。5.2 网格化采样网格化是把图片切成grid_w x grid_h的格子。每个格子对应一颗钻位。网格大小怎么定一般看成品画布尺寸和钻的直径。若珍珠直径是 2.5mm画布宽 10cm大约就是一行 40 颗若用 3mm 珍珠则约 33 颗。实际项目中这些数字需要结合工厂钻头夹具和打印精度来确定。做错的表现就是格子太大丢失细节格子太小钻位数量巨大工厂根本没法配钻。5.3 颜色采样与色板匹配每个格子内部有若干个像素点取平均色就是该格子的颜色。然后把这个颜色放到色板的所有颜色里做距离计算找离它最近的色号。常用距离是欧氏距离计算 RGB 三个通道的差值。这一步是整个流程的灵魂。为什么有的图排出来颜色“脏”因为原图颜色正好落在两个色板颜色的中间位置最近邻匹配只能选一个选错了观感就突兀。实际工程里会对这种情况做“防抖”处理比如要求匹配距离低于某个阈值否则标记为待人工处理。5.4 生成钻位矩阵当所有格子都匹配到色号后程序会生成一个二维矩阵矩阵里每个元素是色号编号。这个矩阵可以直接可视化也可以输出成带颜色的预览图。预览图的作用是让操作者不看原图也能直接判断“效果大概什么样”。多数软件在这一步还会做噪声检测如果某一个格子颜色和周围 8 个格子差异过大可能是背景噪点或匹配失误会被自动修正。5.5 导出模板模板的格式有很多种常见的是CSV每行是一个格子的坐标和色号方便程序读取图片格式把色号直接打印在网格中供人工贴钻参考SVG/PDF适合印刷成画布自有格式配合特定施钻设备使用。导出模板时必须标注坐标系约定。比如(0,0)是左上角还是左下角行优先还是列优先。项目里如果多人协作这一步最容易出冲突。6. 排钻助手最小原型代码实现下面我们用 Python 实现一个最小排钻原型。虽然它还不是商业软件但你已经能看清完整的数据链路。6.1 文件结构diamond-tool/ ├── color_utils.py # 图像读取与网格采样 ├── diamond_planner.py # 主流程 ├── nutils.py # 色板读取与匹配 ├── palette.json # 示例色板 └── demo.jpg # 你的测试图6.2 色板文件palette.json色板是排钻系统最重要的配置文件。建议用 JSON 或 CSV 单独维护不要硬编码在代码里。下面的示例只写了 4 个颜色实际工厂色板一般有 20 到 60 个色号。{ P001: {name: 白色, rgb: [255, 255, 255]}, P002: {name: 黑色, rgb: [20, 20, 20]}, P003: {name: 红色, rgb: [200, 30, 30]}, P004: {name: 蓝色, rgb: [20, 80, 200]}, P005: {name: 黄色, rgb: [240, 200, 40]}, P006: {name: 绿色, rgb: [40, 160, 70]}, P007: {name: 橙色, rgb: [240, 120, 30]}, P008: {name: 紫色, rgb: [120, 40, 160]} }6.3 图像处理模块color_utils.py# 文件路径color_utils.py # 功能读取图片、统一尺寸、按网格采样颜色 import cv2 import numpy as np def load_image(path, target_widthNone, target_heightNone): 读取图片并转为 RGB 格式可选统一尺寸。 img cv2.imread(path) if img is None: raise FileNotFoundError(f无法读取图片: {path}) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) if target_width and target_height: # INTER_AREA 适合缩小能保留更多整体色彩信息 img cv2.resize(img, (target_width, target_height), interpolationcv2.INTER_AREA) return img def grid_colors(image, grid_w, grid_h): 将图片切分为 grid_w x grid_h 的网格每个格子返回平均颜色。 返回形状为 (grid_h, grid_w, 3) 的数组。 h, w, _ image.shape step_x w // grid_w step_y h // grid_h colors [] for gy in range(grid_h): row [] for gx in range(grid_w): x0 gx * step_x y0 gy * step_y cell image[y0:y0 step_y, x0:x0 step_x] avg cell.reshape(-1, 3).mean(axis0) row.append(avg.astype(int)) colors.append(row) return np.array(colors)这个模块做的事情很简单读图把图切成grid_w列、grid_h行的格子然后每个格子求 RGB 平均色。后续的色号匹配就基于这个平均色数组来做。6.4 色板工具模块nutils.py# 文件路径nutils.py # 功能加载色板、将颜色映射到最近色号 import json import numpy as np def load_palette(path): 从 JSON 文件加载色板返回色号、名称和 RGB 数组。 with open(path, r, encodingutf-8) as f: raw json.load(f) codes [] names [] rgbs [] for code, info in raw.items(): codes.append(code) names.append(info[name]) rgbs.append(info[rgb]) return codes, names, np.array(rgbs, dtypenp.float64) def match_palette(color, palette_rgb): 返回颜色在色板中最接近的索引。 使用 RGB 欧氏距离作为相似度度量。 diff np.abs(palette_rgb - color.astype(np.float64)) dist diff.sum(axis1) return int(np.argmin(dist))注意这里用了 RGB 欧氏距离。它简单但不是人眼感知上最准确的度量。生产级排钻工具通常会改用 CIEDE2000 色差公式。新手先用欧氏距离跑通流程再逐步替换。6.5 主流程diamond_planner.py# 文件路径diamond_planner.py # 功能输入原图 - 网格化 - 色板匹配 - 导出 CSV 和预览图 import argparse import csv import os import cv2 import numpy as np from color_utils import grid_colors, load_image from nutils import load_palette, match_palette def main(): parser argparse.ArgumentParser(description排钻助手最小原型) parser.add_argument(--input, requiredTrue, help输入图片路径) parser.add_argument(--palette, defaultpalette.json, help色板文件) parser.add_argument(--output, defaultoutput, help输出目录) parser.add_argument(--grid-w, typeint, default40, help网格列数) parser.add_argument(--grid-h, typeint, default40, help网格行数) args parser.parse_args() codes, names, palette_rgb load_palette(args.palette) # 先统一缩放到一个合适的分辨率减少后续计算量 img load_image(args.input, target_widthargs.grid_w * 10, target_heightargs.grid_h * 10) colors grid_colors(img, args.grid_w, args.grid_h) os.makedirs(args.output, exist_okTrue) # 导出 CSV 模板 csv_path os.path.join(args.output, diamond_map.csv) with open(csv_path, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([x, y, color_code, color_name, hex]) for gy in range(args.grid_h): for gx in range(args.grid_w): idx match_palette(colors[gy, gx], palette_rgb) rgb palette_rgb[idx].astype(int) hex_color #{:02X}{:02X}{:02X}.format(rgb[0], rgb[1], rgb[2]) writer.writerow([gx, gy, codes[idx], names[idx], hex_color]) # 导出预览图把每个格子放大成 10x10 像素的色块 preview np.zeros((args.grid_h * 10, args.grid_w * 10, 3), dtypenp.uint8) for gy in range(args.grid_h): for gx in range(args.grid_w): idx match_palette(colors[gy, gx], palette_rgb) preview[gy * 10:(gy 1) * 10, gx * 10:(gx 1) * 10] palette_rgb[idx] preview_bgr cv2.cvtColor(preview, cv2.COLOR_RGB2BGR) preview_path os.path.join(args.output, preview.png) cv2.imwrite(preview_path, preview_bgr) total args.grid_w * args.grid_h print(f完成共 {total} 个钻位) print(fCSV 模板: {csv_path}) print(f预览效果: {preview_path}) if __name__ __main__: main()main 函数做了四件事加载色板读取原图并按固定尺寸缩放网格化后逐格匹配色号导出 CSV 和预览图。6.6 批量处理脚本batch_run.sh生产环境很少单张处理通常是一个文件夹几十张图。写一个简单的 Shell 循环即可。#!/usr/bin/env bash # 文件路径batch_run.sh # 功能批量跑排钻程序 set -e mkdir -p batch_output for img in ./batch_input/*.jpg ./batch_input/*.png; do if [ ! -f $img ]; then continue fi base$(basename $img) base${base%.*} echo 正在处理: $img python diamond_planner.py \ --input $img \ --palette palette.json \ --output ./batch_output/$base \ --grid-w 40 \ --grid-h 40 done echo 全部批次完成注意这个脚本没有做失败隔离。某一张图坏了整批就会中断。更稳妥的写法是在 Python 主流程里加try-except把失败文件单独记录同时保留成功结果。建议在进入生产环境前把它升级成 Python 批量脚本。6.7 异形图的蒙版处理思路异形钻石画心形、星形、圆形不能直接套矩形网格。否则透明区域也会被排成钻位成品轮廓不合理。处理思路是读取图片的 Alpha 通道或额外蒙版网格采样时只统计蒙版内像素导出 CSV 时跳过蒙版外的格子预览图只画蒙版内的色块。下面是核心片段可以放在 grid_colors 之后使用# 参考片段只统计蒙版内的像素 import cv2 import numpy as np def masked_avg_color(cell_rgb, mask_cell): 对带蒙版的格子求平均颜色。 if mask_cell.sum() 0: return None pixels cell_rgb[mask_cell 0] return pixels.mean(axis0) # 读取带透明通道的图片示例 img cv2.imread(heart.png, cv2.IMREAD_UNCHANGED) rgb cv2.cvtColor(img[:, :, :3], cv2.COLOR_BGR2RGB) alpha img[:, :, 3]异形排钻是很多新手容易忽视的进阶需求。如果你的业务主要是异形珍珠画建议优先确认所用软件对透明通道的支持情况。7. 运行结果与效果验证代码写完后先用一张测试图跑一遍。7.1 运行命令python diamond_planner.py \ --input demo.jpg \ --palette palette.json \ --output demo_out \ --grid-w 40 \ --grid-h 40预期输出完成共 1600 个钻位 CSV 模板: demo_out/diamond_map.csv 预览效果: demo_out/preview.png进入demo_out目录后你会看到两个文件。.csv文件每行是一个格子包含 x、y 坐标、色号、颜色名和十六进制颜色值。preview.png是把色板匹配结果可视化后的图片适合直接目检效果。7.2 判断成功与否判断一张排钻模板是否合格主要看三点文件行数是否等于grid_w * grid_h比如 40x40 就是 1600 行CSV 中色号是否有明显异常比如整片区域都是同一个色号重点检查背景区域预览图轮廓是否和原图基本一致如果边缘糊成一片说明网格太粗或背景没处理干净。7.3 失败先看哪里运行失败时不要着急改代码。先按优先级排查图片路径是否正确是否包含中文/空格字符是否安装了所有依赖是否输出目录权限不足是否色板 JSON 格式有误。其中图片路径是新手最容易踩的坑。Windows 下路径反斜杠转义问题、中文路径编码问题都可能导致imread返回空对象。8. 常见问题与排查思路下面整理的是排钻流程里最高频的几类问题。无论是用商业软件还是自研工具这套排查思路都通用。问题现象可能原因排查方式解决方案导入后图片全黑图片路径错误或读取失败检查控制台是否报错确认文件是否存在使用绝对路径确认输出目录可写输出的钻位色号大面积相同色板颜色太少或图片整体偏灰打印色板 RGB 与采样平均色对比扩充色板常用色先做白平衡再跑排钻效果与原图差异大网格太小细节丢失或背景太复杂对比原图和 preview.png先抠图再提高 grid-w/grid-h批量处理中途中断个别图片损坏或格式不支持查看异常堆栈定位到具体图片批处理脚本加 try-except失败文件单独记录CSV 用 Excel 打开乱码编码问题用文本编辑器查看 CSV 头部写文件时使用utf-8-sig编码异形钻石画错位矩形网格不适用非矩形轮廓检查原图是否有透明通道使用蒙版只对有效区域生成钻位同一张图不同批次结果不同色板文件被修改或随机采样未固定对比两次色板文件 MD5色板文件纳入版本管理固定脚本参数预览图颜色偏暗原图曝光不足查看原图直方图预处理阶段增加亮度/Gamma 校正9. 最佳实践与工程建议代码能跑起来只是一个开始。真正要在工厂或跨境业务里稳定使用需要把下面这些工程问题处理好。9.1 色板要单独管理纳入版本控制色板是整个系统的数据核心。如果色号定义分散在代码里一旦工厂新增一批钻色改起来就是灾难。推荐的做法是色板文件独立成 JSON/CSV放在统一目录用 Git 管理。每次更新色板都能追踪到“哪一批订单使用的是旧色板”避免返工。9.2 固定网格参数与物理尺寸网格不是越大越好。排钻时一定要先确认珍珠/钻的直径和成品画布尺寸。一个简单换算公式每行可排钻数约等于画布宽度除以单颗珍珠直径。假设画布宽 30cm珍珠直径 3mm那每行最多约 100 颗。如果软件设置 200 列最后导出的模板对不上实际施钻设备只能作废。9.3 先小图试点再全量批处理不要第一次用脚本就扔进去 100 张图。正确的做法是先选 3 到 5 张有代表性的图跑完以后人工检查预览图确认色板匹配正常、轮廓还原度符合预期再扩大批量范围。这个习惯能帮你避免“一批图全部跑完才发现色板配错”的大规模返工。9.4 输出模板要带元信息CSV 模板只写坐标和色号不够。生产环境建议在输出目录生成一个meta.json记录输入图片、网格尺寸、色板版本、运行时间、程序版本。这样后面导出问题排查时不需要靠肉眼回忆。{ input: demo.jpg, grid_w: 40, grid_h: 40, palette: palette_v2.json, software: diamond-tool, version: 0.1.0, created_at: 2025-01-01 12:00:00 }9.5 关于 AI 工作流的正确使用姿势对于形状规整、背景干净的产品图专用排钻软件确实更快。但遇到带复杂光影的插画或生活照建议先用通用 AI 工作流预处理用抠图模型去掉复杂背景用 AI 补全缺失细节导出成背景干净的图再交给排钻软件。这种“AI 工作流做前处理排钻工具做后处理”的组合是当前效率最高、质量最稳的实践方式。不要指望一个工具解决所有情况也不要因为专用软件快就放弃对前处理的理解。9.6 安全与版权提醒在批量处理客户原图时如果是跨境订单要注意图片使用授权。不要直接拿没有版权的图片制作模板商用以免在平台审核和版权纠纷中处于被动位置。另外涉及生产设备、加工参数的修改务必先在测试环境验证备份原始配置并遵循最小权限原则。10. 总结与后续学习方向排钻这件事看起来是“图片转马赛克”实际做起来牵扯到采样、色号映射、模板格式、批量工程化、异形蒙版处理等一系列问题。珍珠钻石画 5.0 这类软件能“比 AI 工作流还快”本质不是因为模型更强而是因为它在确定性任务里做了足够的流程固化。你理解了这套流程再去用任何排钻助手软件都会比别人多一层判断力你知道参数应该怎么调知道为什么结果会偏色知道哪一步出了问题该去检查哪里。如果你想继续深入建议按这几个方向展开把颜色匹配算法从 RGB 欧氏距离升级为 CIEDE2000提升人眼观感为异形钻石画增加蒙版处理支持心形、圆形等轮廓给批处理脚本增加失败隔离加入并发加速对接工厂实际模板格式把 CSV 导出升级为 SVG/PDF。工具和模型会一直更新但“输入图片 → 网格采样 → 色号匹配 → 导出模板”这条链路不会变。先跑通最小原型再逐步加固是更稳妥的做法。