使用Imagemagick将.jpg图片居中放置在PDF中?

10

我正在使用ImageMagick 6.6.2-6 2011-03-16版本的convert,并希望使用它从图像生成一个A4 PDF,其中图像将不会被缩放并且居中。

我正在运行以下代码(修改自使用ImageMagick叠加图像):

# generate a 100x100 JPG with just red color
convert -size 100x100 xc:red red.jpg

# generate PDF from JPG
convert -page A4 xc:white red.jpg -gravity center -composite -format pdf out.pdf

...但是实际上什么都没有显示?对于png图像也是同样的情况...

请注意:

  • 只有'convert -page A4 red.jpg out.pdf'可以工作-但是图像不居中; (-gravity center导致图像不显示)
  • 如果图像是png,'convert -page A4 -gravity center red.png out.pdf'确实很好用

...然而,我想让convert直接嵌入JPEG流的内容-因此,我不想先将JPG转换为PNG。

那么,是否可能使用convert直接在A4 PDF页面中居中JPG图像?

非常感谢您提前的任何答案,
干杯!

 

编辑2:@John Keyes的答案适用于上面的示例; 图像“小于”PDF大小-但是如果图像更大,例如:

$ convert -size 1228x1706 -background \#f44 -rotate 45 gradient:\#f00-\#fff red.jpg
$ identify red.jpg 
red.jpg JPEG 2075x2075 2075x2075+0+0 8-bit DirectClass 120KB 0.000u 0:00.000

如果你不更改大小,只改变图像的-gravity参数,则会失败。然而,结果是这样的:“如果你将-extent更改为50x50,然后调整-gravity,你就会看到变化”,但问题是:你要改变哪一个范围,是图像的范围还是最终PDF的范围?

好吧,事实证明-它是最终PDF的范围...要找到convert视为其查看的大小,请检查页面:Magick::Geometry-但请注意,“Postscript页面大小规格”(如“A4+43+43>”)不幸在此上下文中导致convert崩溃...但至少可以从该页面复制大小的相应数字(595x842);最后,这样做有效:

convert -page A4 -gravity center -resize 595x842 -extent 595x842 red.jpg out.pdf

...实际上,-extent部分并不是必要的——-resize部分才是重要的,它可以显示大图像。

然而,问题在于所包含的图像似乎已经被重新采样了,但我只想显示缩放后适合页面的原始JPG流,否则希望将其插入文件中。因此,我认为问题仍然部分存在争议 :)

编辑:相关:

2个回答

5
以下内容对我来说完全有效:
convert -page A4 red.jpg  -gravity center -format pdf out.pdf

如果你改变“files”的顺序,它也可以工作:

convert -page A4 red.jpg xc:white -gravity center -composite -format pdf out.pdf

我认为红色图片是居中的,但白色被绘制在其上方。

太棒了 - 非常感谢,@John Keyes!我本来以为我已经尝试过使用“-format pdf”了,但失败了;但是我正在尝试您的第一个命令行,它非常好用! :) 再次感谢 - 干杯! - sdaau
不用谢。我已经多次深入研究了ImageMagick选项。 - John Keyes
4
在版本6.9.2中,这对于大型图像(例如我转换的5 MB JPEG)无法正常工作,它只会生成一个空页面。如果没有“gravity center”选项,它会工作,但是当然不会居中。这似乎是一个未解决的问题:https://www.imagemagick.org/discourse-server/viewtopic.php?t=22759 - mischka
这两个命令都将红色正方形放在左上角,即使它们使用了“-gravity center”的参数... - Luan Nico

0

好的,这与imagemagick无关,但是在Latex中有一个解决方案,使用tikz包(使用如何定义图形大小以便占用页面的其余部分?#14514),它似乎可以可靠地将图像放置在页面上,并完全保留它们:

% note: need to run pdflatex twice!! First time generates blank pages!
% convert -size 1228x1706 -background \#f44 -rotate 45 gradient:\#f00-\#fff red.jpg
% convert -size 595x1400 xc:red redlong.jpg

\documentclass[a4paper]{letter}

\usepackage{graphicx}
\usepackage[hmargin=0.5cm,vmargin=0.5cm]{geometry} % sets page margins

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\imagepage}[1]{
\tikz[overlay,remember picture]\coordinate (image-start); \par
\vfill
\null\hfill
\begin{tikzpicture}[overlay,remember picture]
  \path let \p0 = (0,0), \p1 = (image-start) in
    node [inner sep=0pt,outer sep=0pt,anchor=center] at (current page.center) {%
      \pgfmathsetmacro\imgheight{\y1-\y0}%
      \includegraphics[height=\imgheight pt,width=\textwidth,keepaspectratio]{#1}%
  };
\end{tikzpicture}%
}



\begin{document}


% there must be a \n\n after {letter!}
\begin{letter}

  \imagepage{red.jpg}
\end{letter}


\begin{letter}

  \imagepage{redlong.jpg}
\end{letter}

% see also \resizebox{\textwidth}{!}{\includegraphics{red.jpg}}
\end{document}

注意,letter文档类被用于允许每个图像在单独的页面上拆分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接