本地版 · 把文档透视变形后贴进实拍照片的纸张区域,全部计算在浏览器内完成,图片不上传服务器。
处理中…
褶皱/弯曲的纸边缘是波浪形,四边形贴不满、也容易溢出。开启后会自动提取纸张真实轮廓(绿色虚线),贴图按它裁剪,角点不必抠得很准。
4 角:左上 → 右上 → 右下 → 左下,适合平摊的纸。
8 角:在 4 角基础上,再点上中、右中、下中、左中(共 8 点),可让纸张弯曲卷边,中心点自动计算。
描边:沿纸张轮廓依次点若干点(≥8,会自动描一圈),文档按这个轮廓做 Coons 网格变形,波浪边、卷边、不规则纸张都能贴合。
还没有结果
版面与基础调整
印刷质感 · 决定文字是「印进纸里」还是「浮在表面」
纸张融合:用正片叠底把文档"印"到纸上。100% 时文档白底完全等于该处纸面(无白雾);调 0 则退化为直接覆盖(会有可见边界)。
墨色通透:真实的墨不是不透明的黑块——纸的纤维在墨下仍会反光。6% 表示满墨处仍保留 6% 的纸面反射,黑字会落到 35~40 灰阶(实测实拍印刷品正是这个区间,原站输出约 38),纸纹因此能"透过"文字显形。调 0 = 纯黑墨(悬浮感最强);20 以上会明显发灰,适合做旧/传真感。
颗粒融合:把纸面的高频颗粒/纤维注入墨中。乘法在暗部会把纹理压掉(墨越黑、纸纹越看不见),这一步把它补回来——也是"文字是否浮在表面"最关键的开关。
褶皱透墨:把纸的大尺度褶皱明暗注入墨中,让折痕穿过文字时不会"断开"。
墨边渗化:给墨边加轻微扩散与纤维抖动,消除矢量字边缘的"塑料感"。扩散半径会按「输出像素 / 文档像素」自动衰减——文档被缩得越小,抗锯齿本身带来的柔化越明显,此时不再额外叠加模糊;文档不被缩小时行为不变。
输出倍率:成品原本恒等于背景照片的尺寸。背景若是手机压缩过的小图,而文档又要放下一整页表格,一行字最终只落到几个像素上——这是"糊"的第一位原因,靠采样算法换不回来。自动会按「文档内容宽度 ÷ 纸张在背景上的宽度」选出足够让内容 1:1 落到纸上的倍率(1×~3×,并受画布像素预算限制);背景由原图放大,观感损失远小于文字的收益。
上传时会自动量出文档内容实际占了哪一块(避开扫描/翻拍自带的空白边、单侧阴影与噪点),再依据内容占比决定留边——截图、海报这类内容顶到边的会多留,本来就有宽边距的少留,避免版面被二次缩小。
按内容自动排版=量出内容范围后居中留边(推荐);保留原文件版式=整页缩放,原文件的页边距等比保留(旧行为);内容铺满纸张=内容范围直接铺满;手动=用下面的「页边距」滑块指定(占纸张短边的百分比)。
| 几何变换 | LU 分解(部分选主元)解 8 元线性方程组,求 3×3 单应矩阵,逐像素逆向映射 + 双线性插值 |
|---|---|
| 4 角 vs 8 角 | 4 角 = 单块透视;8 角 = 2×2 分片各自透视,中心点由四角双线性插值算出 → 纸张弯曲效果 |
| 坐标精度 | 角点存原图像素坐标,显示时乘 scale;按 dpr 适配高分屏 |
| 批量 | 多选文件自动排队,逐个渲染,可分别或打包下载 |
| 不依赖服务端 | 原站为 Flask + Pillow transform(..., PERSPECTIVE);本文件用 Canvas 手写同名算法 |
| 已知局限 | 未做真实光照重建;多页 PDF 只取第 1 页;8 角弯曲为分片近似,非严格展开还原 |
仅供个人作品展示、教学演示、技术学习。请勿用于伪造证件、票据、合同等材料。