知乎发二维码如何不被吞

本站作者 2023-11-26 05:10:00

说说发二维码

我想知乎为了防止误伤,对于二维码的识别力度应该是有限的,所以最基本的想法就是对二维码进行几何变换、图像修饰。这里用Mathematica与Blender做演示。

从最基本的开始:

假设我用我的B站主页做二维码,那么首先在Mathematica中用BarcodeImage函数生成图像:

img = BarcodeImage["#/", "QR",   512]

得到图像之后,进行几何变换:

旋转

ImagePerspectiveTransformation[img, RotationTransform[10 [Degree]],  Background -> White, Masking -> All, PlotRange -> All]

随机仿射变换(拉伸+旋转)

ImagePerspectiveTransformation[img,  DiagonalMatrix[{1, 1}] + RandomReal[{-0.4, 0.4}, {2, 2}],  Background -> White, Masking -> All, PlotRange -> All]

随机分式线性变换(透视变换)

ImagePerspectiveTransformation[img,  DiagonalMatrix[{1, 1, 1}] + RandomReal[{-0.4, 0.4}, {3, 3}],  Background -> White, Masking -> All, PlotRange -> All]

先试试这几个看看能不能用

下面使用一个更彻底的处理方法:艺术化。也就是说,将二维码处理为一个三维渲染图像,使得它看起来像是迷宫一样,这样从原则上是无法被识别出来的(因为如果知乎要识别出它,势必会误伤很多其他的图片)。

首先,将其中的像素转为立方体:

img = BarcodeImage["#/", "QR", 1]imgData = ImageData[img];cubes = Table[   If[imgData[[i, j]] =,     Cuboid[{i, j, 0}, {i, j, 0} + {1, 1, 1}]], {i, 1,     Length[imgData]}, {j, 1, Length[imgData[[1]]]}];model = Graphics3D[cubes]

之后,将model导出为stl文件:

Export[NotebookDirectory <> "model.stl", model]

之后,在Blender中导入此model文件:

之后,进行简单的边线清理,设定好材质,进行渲染:

这个的效果非常好,因为我自己拿着微信扫了半天才识别出来。。。。

如果想要咨询 / 定制教程(收费),可以加入知识星球Mathematica·Lab,会长期分享Mathematica的技巧。对于会员的提问,会定期制作针对性的视频教程(点开后扫描):

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。