如何翻转二维码的某些像素?

如何翻转二维码的某些像素?

我想修改二维码中的数据(黑色方块或白色方块),以便在代码中显示我自己选择的任何图形特征,但要牺牲一定程度的冗余度。此网站上有相关问题,例如生成包含图片的二维码或者如何在二维码中添加文字?味道一样。如果你愿意,我正在寻找一种方法来生成损坏TeX 中的二维码。

是否有一个二维码乳胶包,其中有高级命令可以执行此操作,例如\setpixel[xcoord=5,ycoord=12,"black"]

我补充一下,我目前正在试验最新的qrcodeMWE 包,如本帖所示pgf-Tikz QR 码生成器,其非常短文档没有暗示这样的功能。但我的问题并不局限于这个特定的包。


编辑:

嗯,显然需要进一步澄清。因此,如上所述,我使用以下显式 MWE,称为 test.tex:

\documentclass{article}
\usepackage[]{qrcode}
\begin{document}
\qrcode[]{Dummy code}
\end{document}

上述代码可以使用 pdflatex 成功编译,检查编译输出结果可知,pdflatex 将二维码的 0-1 表示形式放入辅助文件 test.aux 中,如下所示:

\relax 
\ifx\qr@savematrix\@undefined\def\qr@savematrix{\begingroup\let\do\@makeother\dospecials\catcode`\{=1\catcode`\}=2\relax \qr@savematrix@int}\def\qr@savematrix@int#1#2#3#4{\endgroup}\fi
\qr@savematrix{Dummy code}{1}{3}{111111100010101111111100000101111101000001101110100111101011101101110101000001011101101110101010001011101100000100110001000001111111101010101111111000000001110000000000010111101000111011010111111011010010001110000010100010110000111001110010000110100100001100101000110111001000000001010001011011111111100101010011100100000101001011011100101110101100000101000101110101011110000000101110100000001110111100000101110011101111111111100011010101000}

所以这是二维码的来源,我可以随意修改它,这就是转换成实际图片的内容。此时我的问题归结为以下几点:我怎样才能欺骗 pdflatex 使用我选择的 0-1 字符串,而不是由 qrcode 包和 pdflatex 自动生成的字符串?为了具体说明这个问题,我在 Windows 下使用 TeXnicCenter,然后单击一个按钮来编译乳胶源(没有花哨的命令行内容)。


一种简单的方法是小心地将白色或黑色的方块放在二维码图像的顶部,但这真的不是我想要的。

到目前为止,我都是用任何现成的免费在线程序来生成二维码的。然后,正如这篇不太深入的文章所暗示的那样QR 码说明 (YouTube),基于生成的图像 I手动重新着色电子表格(例如 Excel)中的某些单元格,然后通过保存屏幕内容来获取图像。显然应该有更高效(和更可靠!)的方法来做到这一点。


有关的:LaTeX 包可以生成二维码吗?

答案1

这是为了表明灵魂我想要的可以通过基本的乳胶编程知识来实现​​。以下是我的想法:

\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen}
\usepackage{intcalc}
\usepackage{qrcode}

\begin{document}
\qrcode[]{Dummy code}%Original code

\vspace{1cm}
%Corrupted code
\begin{tikzpicture}[scale=0.1]
%\draw[gray,very thin] (0,0) rectangle (21,-21);
    \foreach \x [count=\xi from 0] in {1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1}{%
        \ifthenelse{\x=1}{%
        \fill[black] (\intcalcMod{\xi}{21},-\intcalcDiv{\xi-\intcalcMod{\xi}{21}}{21}) rectangle (\intcalcMod{\xi}{21}+1,-\intcalcDiv{\xi-\intcalcMod{\xi}{21}}{21}-1);}{};}
\end{tikzpicture}

\end{document}

这里发生的事情是,\qrcode[]{Dummy code}调用会生成二进制格式的实际二维码并将其放入辅助文件中。我将其复制粘贴到源文件中(并在数字之间加上逗号),就在语句\foreach之后并按照我的意愿破坏它显示棋盘在其右下角。然后我重新绘制代码。

为了将这个草率的尝试打磨得完美,我们需要:

  1. 通过包生成二维码qrcode,但是不是展示它;并且
  2. 从辅助文件访问二进制代码,并破坏其元素(通过所寻求的\setpixel命令,该命令什么也不做,只是将一些数字翻转d1-d,就像我手动做的那样);并且

然后渲染损坏的代码,可能与上面相同。我感觉我在重新发明轮子,而且我这样做的方式并不特别优雅。

输出

相关内容