首页 文章

使用Imagemagick将.jpg图像置于PDF中心?

提问于
浏览
6

我正在使用 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 导致图像无法显示)

  • 如果图像是png,' 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 page size specifications"像“ A4+43+43> ”不幸,导致 convert 崩溃context ...但至少可以从页面复制大小(595x842)的相应数字;最后这个工作:

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

......实际上, -extent 部分并不是真正需要的 - -resize 部分是重要的一部分,可以显示大图像 .

但是,这里的问题是所包含的图像似乎是重新采样的 - 但是,我只是想显示缩放以使其适合页面,但是否则会将原始JPG流插入文件中..所以我猜猜问题仍然是部分开放的:)

编辑:相关:

2 回答

  • 0

    以下适用于我:

    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是居中的,但白色是在它上面绘制的 .

  • 4

    好吧,这是在imagemagick之外,但这里是Latex的解决方案,使用 tikz 包(使用How to define a figure size so that it consumes the rest of a page? #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 documentclass用于允许每个图像在单独的页面上拆分 .

相关问题