我正在使用convert
版本ImageMagick 6.6.2-6 2011-03-16,我想用它从图像生成A4 pdf,其中图像将是非缩放的并集中。
我正在运行以下内容(作为Overlaying Images with 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
导致图片无法显示)convert -page A4 -gravity center red.png out.pdf
”确实可以正常使用 ...但是,我希望convert
直接嵌入JPEG流的内容 - 因此,我不想先将JPG转换为PNG。
那么,是否可以使用convert
将JPG图像直接置于A4 PDF页面中心?
非常感谢任何答案,
干杯!
EDIT2:@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
...然后它会失败。然而,事实证明:“if you change -extent to 50x50, then play with -gravity, you'll see changes” - 除了,问题是:你改变哪个范围,图像的范围 - 或最终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流插入文件中。所以我猜这个问题仍然是部分开放:)
编辑:相关:
答案 0 :(得分:4)
以下对我来说非常适合:
convert -page A4 red.jpg -gravity center -format pdf out.pdf
如果您更改“文件”的顺序,它也会起作用:
convert -page A4 red.jpg xc:white -gravity center -composite -format pdf out.pdf
我认为red.jpg是居中的,但白色是在它上面绘制的。
答案 1 :(得分:0)
嗯,这不在imagemagick中,但这是Latex中的一个解决方案,使用tikz
包(使用How to define a figure size so that it consumes the rest of a page? #14514),它似乎可靠地将图像放在页面上,并完全保留它们: / p>
% 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
文档类用于允许每个图像在单独的页面上拆分..