我第一次把一张刻坏的CD-RW对着台灯转了个角度,才意识到盘面那层若有若无的暗纹并不是“烧焦了”,而是相变记录层在可见光下留下的反射率差。后来我反复琢磨“用CD-RW刻录可见图像”这件事,发现它本质上是一个介于数据编码和光学艺术之间的逆向工程:普通刻录机只认扇区、帧、EFM游程和CIRC校验,而人眼看到的是轨道上非晶态标记与晶态间隔的宏观分布。把一张照片、一段文字或一个几何图案“写”进CD-RW,让它不需要特殊光雕设备也能在斜光、偏振光或微距镜头下显影,核心不在于画图软件,而在于把像素灰度翻译成记录层的占空比,再翻译成合法的通道位流。这个方向适合喜欢折腾光盘底层格式、对相变材料、光学观察和命令行走廊有基本概念的人,也适合想理解“数据如何变成物质痕迹”的爱好者。它解决的不是高清印刷问题,而是让一张可擦写光盘成为低分辨率、强材质感的光学载体,并且整个过程可以测量、可以校准、可以复现。下面我按我实际推演和试做的顺序,把边界、原理、编码链路、操作流程和踩坑记录完整拆开。
1. 先把边界说清:CD-RW上的“可见图像”到底是什么
1.1 记录层相变而不是盘面印刷
很多人一听“光盘刻录图像”,第一反应是盘面光雕或者贴纸打印。这里必须先把概念钉死:我讨论的是CD-RW的相变记录层。CD-RW盘片内部有一层以硫系合金为主的记录材料,激光聚焦后局部加热到熔化温度再快速冷却,会形成非晶态标记;擦除时用较低功率加热到结晶温度并缓慢冷却,又回到晶态。晶态和非晶态的反射率不同,宏观上就表现为轨道上深浅不一的纹理。这个纹理不是油墨,不是涂层脱落,也不是激光烧穿的坑,而是材料相态变化带来的光学差异。它很薄、很细、对比度有限,所以必须在合适角度下观察,不能指望像打印纸一样正对着看。
这也解释了为什么CD-RW可以反复擦写,而CD-R写完一次就固定。CD-R靠有机染料变色,CD-RW靠相变可逆。做可见图像时,CD-RW的优势是你可以先写测试图案、观察、擦除、再调参数;劣势是相变层的反射率差本来就不大,图案容易发灰、发淡,需要靠半色调和观察技巧放大。它更像在金属表面做微弱的氧化纹理,而不是在白纸上画黑线。
1.2 与光雕类方案的差异和取舍
市面上有些盘面光雕方案是在盘片表面涂层上直接用激光烧出可见图案,分辨率和对比度通常更好,但需要盘片和刻录机同时支持,素材和硬件绑定很强。CD-RW相变图像走的是另一条路:不依赖盘面涂层,不依赖厂商私有指令,而是利用标准刻录链路本身留下的记录痕迹。它的好处是通用性更强,坏处是分辨率受轨道间距、EFM游程和纠错编码限制,图案更像“光学纹理画”,不是照片级输出。
| 路线 | 成像位置 | 对比度来源 | 分辨率特点 | 可逆性 | 主要限制 |
|---|---|---|---|---|---|
| 盘面光雕类方案 | 盘面涂层 | 涂层烧蚀变色 | 较高,受涂层限制 | 通常不可逆 | 需专用盘片和固件支持 |
| CD-RW相变图案 | 记录层 | 晶态与非晶态反射率差 | 轨道级纹理,宏观可见 | 可擦写 | 编码约束强,观察角度敏感 |
| 普通数据刻录 | 记录层 | 合法扇区数据痕迹 | 不追求视觉 | 可擦写 | 数据模式与图像无关 |
| 专业母盘直写 | 感光层或金属层 | 显影或烧蚀 | 很高 | 不可逆 | 设备门槛高,不适合桌面环境 |
我选CD-RW路线,是因为它能把“数据编码”和“光学艺术”接在一起:你写的仍然是合法扇区,但你会刻意挑选数据模式,让EFM编码后的标记密度在宏观上呈现灰度。这个取舍决定了后面所有工作都要围绕“可写性”和“可见性”的平衡展开,不能为了图像好看而写出刻录机不认的非法帧。
1.3 逆向工程的对象是映射关系而不是破解
标题里的“逆向工程”容易被误解。我做的不是破解固件,也不是绕过版权保护,而是逆向一套映射:图像像素坐标如何落到盘片的逻辑地址,灰度值如何落到非晶态标记的占空比,占空比又如何被EFM和CIRC改写成实际通道位流。正向看,刻录机把用户数据变成激光脉冲;逆向看,我想先决定激光脉冲在盘面上留下的宏观纹理,再反推应该喂给它什么数据。
这个映射不是一一对应的。CIRC会插入校验字节,EFM会把8位数据变成14位通道位,合并位还会改变游程。所以你不能简单地说“这个像素是黑,就写0xFF”。更现实的做法是:建立候选数据块库,先用编码模拟器算出每个候选块在局部轨道上的标记占空比,再拿目标灰度去匹配。分辨率越低,匹配越容易;图案越复杂,越需要接受纹理化和误差。这个认知很关键,否则你会在一开始就追求“照片级”,然后被编码约束反复打脸。
2. 光学与材料:为什么刻过的轨迹能在斜光下显影
2.1 盘片截面和相变层的角色
一张CD-RW从下往上大致包括透明基板、记录层、保护层、反射层和涂层。激光从基板侧进入,穿过透明层聚焦到记录层。记录层很薄,相变区域更薄,所以肉眼看到的不是“坑”,而是反射率分布。盘面有预刻沟槽,沟槽负责引导轨道并提供地址信息,轨道间距通常在1.6微米量级。这个尺度远小于人眼分辨率,但成千上万条轨道上的明暗差异叠加起来,就会形成肉眼可见的宏观图案。
我在斜光下观察时,会看到类似同心螺旋的细纹,这不是图像本身,而是轨道结构。真正由数据造成的差异,是某些轨道段更暗、某些段更亮。因为CD是CLV恒线速,轨道是螺旋连续的,所以任何图案都会带一点螺旋感。你想做同心圆、放射线或者文字,都要接受这个基底纹理。它像在粗布上刺绣,布纹永远在。
2.2 晶态与非晶态反射率差的实际表现
晶态区域原子排列有序,反射率相对高;非晶态区域排列无序,反射率相对低。两者差异不是黑白分明,通常只是百分之十几甚至更小的相对变化。正对光看,可能只觉得盘面有点“脏”;斜着看,或者用偏振片压掉部分镜面反射,对比度才会出来。这个特性决定了图像设计要避免大面积中间灰,因为中间灰在低对比度下最容易糊成一片。高对比的黑白块、粗线条、大字和几何图形,成功率明显高于细腻人像。
我自己的经验是:把目标图像先做“二值化+粗化”处理,再考虑半色调。比如一个圆形徽记,可以用密集非晶态标记做暗部,用晶态间隔做亮部,边缘留出明显过渡。细小的抗锯齿在屏幕上好看,刻到盘上会被轨道和游程吃掉。观察时用手机微距加侧光,比肉眼直接看更容易记录;但拍摄角度要固定,否则同一张盘不同照片的对比度没法比较。
2.3 功率窗口和速度选择的基本计算
CD-RW的写入功率有一个窗口:太低,材料达不到熔化温度,标记不成形;太高,可能过度加热、擦除不干净或者损伤记录层。不同盘片标称的功率范围不同,刻录机会根据ATIP信息和策略表调整。我不建议一上来就手动改功率,先用中低速测试更稳。速度方面,1倍速CD的线速度大约在1.2到1.4米每秒,4倍速就是四倍左右。速度越高,激光在每一点上的驻留时间越短,相变冷却过程越难控制,图案对比度往往越差。
一个粗略的估算:如果轨道间距按1.6微米算,1倍速下每秒走过的轨道长度约1.2米,相当于每秒经过约75万个轨道间距的纵向尺度,但横向只有一条轨道宽。实际图像分辨率更多受轨道间距和EFM游程限制,不是受主轴转速限制。速度选择的核心不是“算出一个绝对最优”,而是让刻录机工作在它策略表里比较保守的区间。我通常从4倍速开始,如果图案太淡就降到2倍速,如果盘片标称不支持低速就按标称来。不要用最高速做艺术盘,失败率会明显上升。
注意:CD-RW的擦除功率通常高于写入功率,反复擦写会增加材料疲劳。测试图案不要在同一小段轨道上反复写擦十几次,换一段区域做对照更可靠。
3. 数据编码链路:图像如何被“翻译”成EFM游程
3.1 从像素灰度到占空比的半色调映射
图像进入光盘之前,先要变成“每个局部区域需要多少非晶态标记”的图。最简单的映射是占空比:设目标灰度归一化为g,范围0到1,暗部希望非晶态标记多,亮部希望晶态间隔多。可以定义占空比d = d_min + g × (d_max - d_min)。d_min和d_max不是0和1,因为EFM游程限制决定了标记和间隔都不能无限长或无限短。实际可用范围可能在0.2到0.8之间,具体要靠编码模拟器测。
半色调的作用是把连续灰度变成局部密度。比如一个16×16像素的块,目标灰度0.5,不是让每个点都半黑,而是让其中一半左右的通道位段处于非晶态。因为人眼和相机在宏观距离上看的是平均反射率,局部密度够了就会形成灰度感。这里的关键是“局部”要大于编码约束的尺度,否则你想要的灰度会被EFM和CIRC打散。我的做法是先把图像缩小到很低的分辨率,比如64×64或128×128,再用块状半色调映射到扇区段,最后接受它变成纹理画。
3.2 扇区、帧和CIRC为什么不能直接写像素
CD的一个扇区有2352字节用户数据,分成98帧,每帧24字节数据加校验,再经过CIRC交织和EFM调制。CIRC是交叉交织里德-所罗门码,用来纠突发错误;EFM是8到14调制,把8位数据变成14位通道位,并保证游程在3到11个通道位之间。你写进去的用户数据不是最终盘面标记,最终标记是编码后的通道位序列。CIRC会插入校验字节,EFM会改变位模式,合并位还会根据前后符号调整。
这意味着“像素到字节”的映射必须经过编码器。你不能直接控制每一个非晶态标记的长度和位置,只能通过选择用户数据来间接影响。一个实用的方法是建立候选块库:准备若干种2352字节的扇区数据模式,比如全零、全FF、交替模式、伪随机模式、特定游程模式,先用软件模拟CIRC和EFM,统计每种模式在局部产生的标记占空比和低频纹理。然后根据目标灰度选择最接近的候选块。这样虽然分辨率粗,但可写、可读、可复现。
3.3 EFM游程限制对图像纹理的影响
EFM的3T到11T游程限制,会让图像出现一种“条纹化”的底层纹理。短游程多,标记密集,看起来偏暗;长游程多,间隔宽,看起来偏亮。但你不能随意制造任意长度的游程,因为编码表有限。结果是:同样的灰度,在不同数据模式下可能呈现不同的颗粒感。有的区域像细密砂纸,有的区域像粗条纹。做艺术盘时,这种纹理不是缺点,反而可以当作风格。但如果你想要平滑渐变,就会很难。
我试过用交替的短游程模式做暗部,用较长的游程模式做亮部,中间灰度靠混合块实现。效果是近看颗粒明显,远看有灰度。后来我干脆放弃平滑渐变,改用三到五级灰度的海报化风格,图案反而更干净。这个取舍很现实:CD-RW的可见图像不是印刷,它是光学纹理,接受纹理才能做好。
3.4 地址区、TOC和写入范围保护
光盘不是一整片空白磁带,它有导入区、目录区、数据区和导出区。ATIP预刻沟槽里带着绝对时间信息,刻录机靠它定位。RAW写入虽然能让你更自由地组织扇区,但也不能随便写到系统区,否则盘片可能无法识别,甚至让刻录机反复重试。我的原则是:只在数据区中段做图案,前后留出安全边界;先写一张纯数据测试盘,确认刻录机认盘;再做图案盘。不要把图案写到最内圈,因为那里有导入区和文件系统关键结构,也不要把最外圈写满,边缘区域容错更低。
如果你只是做观察用,不要求数据可读,仍然建议保留合法扇区结构。完全乱写可能让刻录机在写入过程中报错,或者写完后无法擦除。可擦写盘的价值在于可逆,别为了艺术把盘写成“一次性废片”。
4. 实操流程:从测试盘到可观察图案
4.1 硬件、耗材和安全准备
我建议准备三张以上同规格CD-RW做对照:一张纯数据测试,一张低密度图案测试,一张正式图案。刻录机选择支持RAW DAO写入、对CD-RW支持较稳的型号,不必追求高速。观察工具包括侧光手电、手机微距镜头、偏振片和黑色卡纸。黑色卡纸用来挡住环境反射,偏振片用来压掉部分镜面反光,侧光角度控制在20到40度之间比较容易看出纹理。安全上,不要拆开刻录机,不要直视激光出口,不要用刀片刮盘面,不要用酒精或溶剂擦相变层。盘面有灰用柔软镜头布从中心向外轻擦。
环境光线也会影响判断。白天窗边散射光下看不清的图案,晚上用单侧光可能很清楚。每次观察记录角度和光源,不然你没法比较两张盘。刻录前让盘片回到室温,不要刚从冷柜或暴晒环境拿出来就写。刻录机连续工作会发热,写两三张后停一会儿,等温度稳定再继续。
4.2 生成图案数据的伪代码思路
下面是我常用的伪代码框架,重点不是某个库,而是映射关系。先把图像缩到低分辨率,再映射到逻辑地址段,再为每个块选候选数据模式。实际实现时,候选块要先经过CIRC和EFM模拟打分,这里用score_block表示。
# 伪代码:从低分辨率灰度图生成候选扇区序列 # 输入:gray_img[y][x] 取值0.0到1.0,0为亮,1为暗 # 输出:pattern.bin,按扇区排列的2352字节块 def gray_to_target_duty(g): d_min, d_max = 0.20, 0.78 return d_min + g * (d_max - d_min) def lba_to_xy(lba, sectors_per_row=96): # 简化映射:实际要用ATIP校准,这里只做示意 return lba // sectors_per_row, lba % sectors_per_row def choose_block(target_duty, candidate_blocks): best = None best_err = 1e9 for block in candidate_blocks: duty = score_block(block) # 模拟CIRC+EFM后的局部占空比 err = abs(duty - target_duty) if err < best_err: best_err = err best = block return best candidate_blocks = build_candidates() # 全零、全FF、交替、伪随机、游程模式等 image = load_low_res_image("pattern.png") # 64x64或128x128 out = bytearray() for y in range(image.height): for x in range(image.width): g = image.get(x, y) duty = gray_to_target_duty(g) block = choose_block(duty, candidate_blocks) out.extend(block) write_raw_dao("pattern.bin", speed=4, buffer_underrun_protect=True)这段代码里最容易被低估的是lba_to_xy。CD是CLV,逻辑地址和物理半径、角度不是简单线性关系。你按行扫描映射,刻出来的图案可能被拉长或旋转。正确做法是先写一张校准盘:在已知LBA区间写几个标记块,观察它们在盘面上的实际位置,反推映射参数。校准一次,后面所有图案都受益。不要跳过这一步,否则你会以为编码错了,其实是坐标映射歪了。
4.3 RAW写入参数和写入步骤
写入时我一般按这个顺序:先擦除整张盘,确保相变层回到晶态;再用RAW DAO方式写入图案数据;写完后不要立刻用手摸盘面,等盘片冷却;最后在普通光驱里读一下,确认盘片没有完全失效。速度从4倍速开始,如果图案太淡再降到2倍速。功率不手动改,除非你有同型号盘片的测试数据。缓存欠载保护要打开,但不要依赖它,因为写入中断会在盘面留下明显断点。
| 参数 | 起始建议 | 调整方向 | 原因 |
|---|---|---|---|
| 写入速度 | 4倍速 | 图案淡则降速 | 低速驻留时间长,相变更充分 |
| 写入方式 | RAW DAO | 不支持则换机 | 便于组织完整数据流 |
| 擦除方式 | 整盘快速擦除 | 先擦后写 | 减少旧图案残留 |
| 缓存保护 | 开启 | 不要频繁中断 | 避免断点破坏图案 |
| 写入范围 | 数据区中段 | 前后留边界 | 避开导入区和边缘 |
| 观察光源 | 单侧白光 | 20到40度 | 增强反射率差对比 |
写入完成后,先不要急着判断成败。把盘放在黑色卡纸上,用侧光慢慢转角度。有时正面看什么都没有,转到某个角度会出现清晰暗纹。手机拍摄时锁定曝光和对焦,不要用自动增强,否则不同照片无法比较。拍完记下速度、功率策略和观察角度,下一张才有参照。
4.4 观察、拍摄和记录方法
观察CD-RW相变图案,光源比相机更重要。我通常用一支小手电从侧面打光,让光线掠过盘面,再用黑卡纸挡住另一侧的环境光。偏振片可以放在光源前或镜头前,旋转到背景反光最暗的位置,图案对比会增强。微距镜头能拍到轨道纹理,但宏观图案用普通手机主摄加侧光更容易看全。拍摄时让盘面占满画面,避免反光点落在图案中心。
记录表格比凭感觉可靠。我会记下盘片编号、写入速度、图案类型、观察角度、光源距离和主观对比度。两张盘对比时,只看同一角度同一光源下的照片。这样你才能判断是速度影响了对比度,还是图案设计本身太细。这个习惯看起来麻烦,但能省下大量重复试错。
5. 常见问题与排查表:图案太淡、错位、写废怎么办
5.1 图案完全不可见或只有螺旋纹
图案完全不可见,先查观察条件,再查写入参数。正对光看不到很正常,换侧光、黑背景、偏振片。如果侧光下只有均匀螺旋纹,没有你设计的明暗块,可能是数据模式太均匀,局部占空比没有拉开;也可能是写入功率太低,相变没有充分发生;还可能是你选的候选块在CIRC和EFM之后占空比趋同。我的排查顺序是:先用一张已知高对比的测试块盘确认观察方法,再检查候选块模拟结果,最后降速重写。
5.2 图案错位、拉伸或旋转
错位通常不是编码问题,而是LBA到物理坐标的映射没校准。CD的CLV结构让同一行LBA在不同半径上的角度长度不同,简单按固定扇区数分行会把图案拉成扇形。解决办法是写校准标记:在几个已知LBA位置写短块,量出它们在盘面上的角度和半径,拟合映射曲线。另一个原因是刻录机的写入起始偏移,换机器后要重新校准。不要用上一张盘的映射参数直接套新机器。
5.3 写入中断、盘片报错和擦除不干净
写入中断常见于盘片脏污、供电不稳、缓存欠载或功率策略不匹配。CD-RW对盘面清洁比较敏感,指纹和灰尘会让激光功率吸收不均匀。擦除不干净会让旧图案叠在新图案上,看起来像重影。处理方法是:换一张盘做对照,清洁盘面,降低速度,关闭其他占用磁盘的任务。如果同一张盘多次擦写后对比度明显下降,说明材料疲劳,换新盘,不要继续加功率硬写。
5.4 可读性和可见性的平衡
可见性追求高占空比差异,可读性追求合法扇区和纠错余量。两者会冲突。我的建议是:如果盘片只用于观察,仍然保留合法扇区结构,但可以牺牲部分数据可读性;如果还要读数据,图案密度不要拉满,写入范围避开文件系统关键区。不要为了更暗把整片区域写成极端模式,那样可能让刻录机读盘时反复纠错,甚至无法擦除。艺术盘和数据盘最好分开,一张盘只做一件事。
| 现象 | 优先排查 | 次优排查 | 处理建议 |
|---|---|---|---|
| 完全看不到图案 | 观察角度和光源 | 写入功率是否过低 | 换侧光、黑背景、偏振片,降速重写 |
| 只有螺旋纹 | 数据模式是否太均匀 | 候选块占空比是否趋同 | 增加高对比候选块,做块状半色调 |
| 图案拉伸旋转 | LBA映射未校准 | 换刻录机后偏移变化 | 写校准标记,重新拟合映射 |
| 图案重影 | 旧数据未擦净 | 盘片材料疲劳 | 整盘擦除,换新盘 |
| 写入中断 | 盘面脏污或供电不稳 | 缓存欠载 | 清洁盘面,降速,关闭占用任务 |
| 读盘困难 | 写入密度过高 | 写入范围压到系统区 | 降低占空比,避开导入区和目录区 |
| 对比度逐次下降 | 反复擦写疲劳 | 功率策略不匹配 | 换盘,不要盲目加功率 |
6. 经验边界与扩展玩法:哪些能做,哪些别硬上
6.1 设备保护和安全操作的底线
CD-RW相变图案是一个低风险但需要耐心的玩法,底线是不要拆刻录机、不要直视激光、不要用化学溶剂擦盘、不要用刀片刮记录层。刻录机激光虽然被封闭在机芯里,但拆开后风险完全不一样,不值得为了观察轨道去冒这个险。盘片清洁用柔软镜头布从中心向外轻擦,不要打圈。写坏的盘不要反复加热试图“修复”,相变层有疲劳,越折腾越糟。电源要稳,连续写入时不要移动机器。
还有一点很现实:不是所有刻录机都愿意接受RAW DAO写入CD-RW,也不是所有盘片都适合低速。你得接受“硬件组合决定上限”。同一张图案数据,换一台机器可能完全写不出可见纹理。遇到这种情况不要怀疑编码,先换盘换机做对照。这个领域的可复现性很大程度依赖硬件批次。
6.2 偏振、显微和多角度观察的扩展
如果你已经能写出基本图案,下一步可以玩观察方式。偏振片能压掉部分镜面反射,让相变区的微弱差异更明显;微距镜头能拍到轨道上的颗粒感,把宏观图案和微观纹理放在同一张照片里;多角度拍摄能做“隐藏图像”效果,正面看是均匀盘面,侧光看才出现文字。还可以把两张不同图案的盘叠在一起,用不同角度观察,做光学叠加的视觉实验。
这些扩展不需要改编码,只需要改观察和记录。我的建议是先把同一张盘在五种角度下拍完,再决定要不要做更复杂的图案。很多时候不是图案不够好,而是观察方法没到位。CD-RW的可见图像本质上是一种低对比度光学纹理,观察方式和图案设计同等重要。
6.3 后续可扩展的方向
如果继续往下走,我会先做三件事:第一,建立更细的候选块库,把不同游程模式和CIRC后的局部占空比标定出来;第二,做一张完整的LBA到物理坐标校准盘,把图案变形降到可接受范围;第三,尝试多级灰度海报化,而不是追求连续渐变。再往后可以研究不同写入速度对相变标记尺寸的影响,或者用显微拍摄做纹理分析。但我不建议一上来就追求高分辨率照片,那会陷入编码约束和硬件限制的双重泥潭。
我最后留下的一张盘,图案其实很简单:一圈粗线、几个大字和一块高密度暗区。它正面看几乎只是一张有点花的CD-RW,侧光下才显出纹理。这个结果不算精美,但它把“数据编码到光学艺术”的链路跑通了:我知道每个暗块对应什么样的占空比,知道哪一段LBA落在了盘面的哪个角度,也知道下一次该降速还是该改候选块。对我来说,这种可测量、可复现的粗糙,比一张不可控的漂亮盘更有意思。