纸张打印

把文档透视变形后贴进实拍照片的纸张区域,全部计算在浏览器内完成,图片不上传服务器。

处理中…

1上传背景模板实拍的纸张照片
拖入照片,或点击选择文件
支持 JPG / PNG / WebP / BMP
2标注纸张角点
按顺时针顺序点选

褶皱/弯曲的纸边缘是波浪形,四边形贴不满、也容易溢出。开启后会自动提取纸张真实轮廓(绿色虚线),贴图按它裁剪,角点不必抠得很准。

三种标注方式怎么选

4 角:左上 → 右上 → 右下 → 左下,适合平摊的纸。
8 角:在 4 角基础上,再点上中、右中、下中、左中(共 8 点),可让纸张弯曲卷边,中心点自动计算。
描边:沿纸张轮廓依次点若干点(≥8,会自动描一圈),文档按这个轮廓做 Coons 网格变形,波浪边、卷边、不规则纸张都能贴合。

3上传要贴合的文档
JPG / PNG / WebP,或 PDF(需联网加载 pdf.js)
4微调并生成

还没有结果

合成参数

版面与基础调整

2
100
100
100
100
100
0
6%

印刷质感 · 决定文字是「印进纸里」还是「浮在表面」

6
100
40
0
35
35

折痕 · 先印后折(打印之后才被折叠 / 揉皱)

100
70
2
1.2
折痕未设置:点「自动估计折痕」,或点「手动标折痕」后在画布上沿折线点两个点(之后可拖动微调)。
每个参数是什么意思

纸张融合:用正片叠底把文档"印"到纸上。100% 时文档白底完全等于该处纸面(无白雾);调 0 则退化为直接覆盖(会有可见边界)。
墨色通透:真实的墨不是不透明的黑块——纸的纤维在墨下仍会反光。6% 表示满墨处仍保留 6% 的纸面反射,黑字会落到 35~40 灰阶(实测实拍印刷品正是这个区间,原站输出约 38),纸纹因此能"透过"文字显形。调 0 = 纯黑墨(悬浮感最强);20 以上会明显发灰,适合做旧/传真感。
颗粒融合:把纸面的高频颗粒/纤维注入墨中。乘法在暗部会把纹理压掉(墨越黑、纸纹越看不见),这一步把它补回来——也是"文字是否浮在表面"最关键的开关。
褶皱透墨:把纸的大尺度褶皱明暗注入墨中。「先印后折」请保持 0——纸是印完才皱的,纸纹不该穿透已经印好的墨层,注入它等于在实色块里画一条发白的亮线(看着像"打印缝隙")。折痕请用下面的「折痕」区。
实墨起伏:中频(几十像素)的墨层厚薄不均。高频颗粒由「颗粒融合」负责、低频光照由正片叠底负责,中间这一档恰好是空缺的——它决定实心色块是"一块均匀的塑料"还是有厚薄的墨。
褶皱带动:几何项。把文字的取点按纸面低频光照的梯度做亚像素位移,让文字在纸弯的地方跟着弯。纸是印完才皱的,印上去的字没理由比纸更直。
折痕·先印后折:折线处同时做两件事——① 墨层被拉伸开裂露白(打印后才折,墨膜会断);② 折线两侧几何错位,文字在折线处形成真正的"折"。裂纹会沿纸纹抖动、宽度沿线变化,不会是一条直尺线。折痕线可自动估计,也可手动标两点后拖动。做法上它不影响纸张取样,只改"从文档哪一点取墨"。
墨边渗化:给墨边加轻微扩散与纤维抖动,消除矢量字边缘的"塑料感"。扩散半径会按「输出像素 / 文档像素」自动衰减——文档被缩得越小,抗锯齿本身带来的柔化越明显,此时不再额外叠加模糊;文档不被缩小时行为不变。

输出分辨率:成品过去恒等于背景照片的尺寸——而背景往往已经被微信之类压过一轮,"一眼就是张压缩图"。手机实拍会把成品补到 ≈12MP(4032×3024,手机主摄的水平),看着才像拍出来的照片;除此之外,纸张区域与文字都会按同一个倍率重采样,文字真正变清楚。上限 3×、并受单张像素预算限制(触屏 16MP / 桌面 20MP);自动改成按「文档内容宽度 ÷ 纸张在背景上的宽度」把内容 1:1 落到纸上。
输入侧也一起放宽了:背景照片原来会被压到长边 2400,4032×3024 的手机原图进来就只剩 43% 的像素——现在手机原图原样通过(触屏环境另留内存余量)。

页边距是怎么算的

上传时会自动量出文档内容实际占了哪一块(避开扫描/翻拍自带的空白边、单侧阴影与噪点),再依据内容占比决定留边——截图、海报这类内容顶到边的会多留,本来就有宽边距的少留,避免版面被二次缩小。
按内容自动排版=量出内容范围后居中留边(推荐);保留原文件版式=整页缩放,原文件的页边距等比保留(旧行为);内容铺满纸张=内容范围直接铺满;手动=用下面的「页边距」滑块指定(占纸张短边的百分比)。

实现要点与技术局限
几何变换LU 分解(部分选主元)解 8 元线性方程组,求 3×3 单应矩阵,逐像素逆向映射 + 双线性插值
4 角 vs 8 角4 角 = 单块透视;8 角 = 2×2 分片各自透视,中心点由四角双线性插值算出 → 纸张弯曲效果
坐标精度角点存原图像素坐标,显示时乘 scale;按 dpr 适配高分屏
批量多选文件自动排队,逐个渲染,可分别或打包下载
不依赖服务端原站为 Flask + Pillow transform(..., PERSPECTIVE);本文件用 Canvas 手写同名算法
已知局限未做真实光照重建;多页 PDF 只取第 1 页;8 角弯曲为分片近似,非严格展开还原

仅供个人作品展示、教学演示、技术学习。请勿用于伪造证件、票据、合同等材料。