使用“trim”分割 NxM 图像会导致舍入误差导致的伪影

使用“trim”分割 NxM 图像会导致舍入误差导致的伪影

我有一个由多个图形拼接而成的图形。为了便于说明和清晰起见,我希望将此图形拆分成各个部分。我已经使用subfloattrim和完成了此clip操作。但是,有时大小不是四舍五入的值。例如,我想将图像拆分成 6 个subfloats,因此trim参数需要在 0 到 0.1666 之间修剪图像的宽度。我按如下方式执行此操作:

\documentclass{article}

\usepackage[utf8]{inputenc}

\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[export]{adjustbox}


\begin{document}

\begin{figure}
    \centering
    \captionsetup[subfigure]{labelformat=empty,justification=centering}
    
    
    \subfloat[]{%
    \centering
    \begingroup
    \sbox0{\includegraphics{example-image-a.png}}%
    \includegraphics[trim=0 0 {.833333\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
    \endgroup
    }% 
\hspace{1em}
\subfloat[]{%
\centering
    \begingroup
    \sbox0{\includegraphics{exp_lsqr_diff.png}}%
    \includegraphics[trim={.1666666\wd0} 0 {.6666666\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
    \endgroup
    \captionsetup{justification=centering}%
}% 
\hspace{1em}
\subfloat[]{%
\centering
    \begingroup
    \sbox0{\includegraphics{exp_lsqr_diff.png}}%
    \includegraphics[trim={.3333333\wd0} 0 {.5\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
    \endgroup
}%
\hspace{1em}
\subfloat[]{%
\centering
    \begingroup
    \sbox0{\includegraphics{exp_lsqr_diff.png}}%
    \includegraphics[trim={.5\wd0} 0 {.3333333\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
    \endgroup
}% 
\hspace{1em}
\subfloat[]{%
\centering
    \begingroup
    \sbox0{\includegraphics{exp_lsqr_diff.png}}%
     \includegraphics[trim={.6666666\wd0} 0 {.1666666\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
     \endgroup
}% 
\hspace{1em}
\subfloat[]{%
\centering
    \begingroup
    \sbox0{\includegraphics{exp_lsqr_diff.png}}%
    \includegraphics[trim={.8333\wd0} 0 {.0\wd0} 0,width=0.16\columnwidth,valign=c,clip]{exp_lsqr_diff.png}%
    \endgroup
}%
\end{figure}

\end{document}

这可行,但会导致无穷小(但可见)的错误,例如(非常放大):

在此处输入图片描述

我知道它们看起来很小,但我尝试过的大多数渲染器(Chrome、Adobe Reader、overleaf)确实在从缩小的图像中查看时增强了这一点,在大多数缩放条件下都非常明显。我该如何解决这个问题?显然我没有足够的空间来容纳我需要的所有精确的小数,它们可能需要(一些)拿着打字机的猴子。

PD:请注意,这个example_image_a.png效果不太明显。我的图像是 64x(64x6),因此效果更明显。使用分辨率更高的图像,这个效果虽然很明显,但如果你仔细观察就会发现,不太明显。

PD2: 示例 png:在此处输入图片描述

答案1

首先,您需要将原始位图的分辨率更改为每英寸 72 像素。这可以通过 ImageMagick 的convert命令行工具来完成。

convert -density 72 -units PixelsPerInch exp_lsqr_diff.png exp_lsqr_diff_72dpi.png

完成此操作后,您可以使用graphicx' 数字参数trim和相关键(不带单位)。单位默认为1bp1/72 英寸。正确设置图像分辨率后,1bp相当于 1 个像素,并且可以精确修剪位图。

转换后的位图exp_lsqr_diff_72dpi.png

在此处输入图片描述

带有修剪位图的示例输入:

\documentclass{article}

\usepackage{graphicx}

\begin{document}

\noindent\frame{\includegraphics[
trim=0 0 320 0, %clip
width=\linewidth]{exp_lsqr_diff_72dpi.png}}

\end{document}

输出:

在此处输入图片描述

相关内容