【问题标题】:Centering a .jpg image in PDF using Imagemagick?使用 Imagemagick 在 PDF 中居中 .jpg 图像?
【发布时间】:2011-11-27 06:51:58
【问题描述】:

我正在使用 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 页面大小规范”不幸的是,就像“A4+43+43>”一样,导致convert 在这种情况下崩溃......但至少可以从页面复制大小(595x842)的相应数字;最后这行得通:

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

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

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

编辑:相关:

【问题讨论】:

    标签: pdf imagemagick jpeg center


    【解决方案1】:

    好吧,这在 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 文档类用于允许将每个图像拆分到单独的页面上..

    【讨论】:

      【解决方案2】:

      以下内容非常适合我:

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

      【讨论】:

      • 太棒了-非常感谢@John Keyes!我可以发誓我已经用-format pdf 尝试过,但我失败了;但我正在尝试你的第一个命令行,效果很好! :) 再次感谢 - 干杯!
      • 不客气。我已经多次陷入 ImageMagick 选项的兔子洞。
      • 这不适用于大图像(版本 6.9.2),在我的情况下转换 5 MB JPEG。它只是产生一个空白页。如果没有“重心”选项,它可以工作,但当然不是居中。似乎是一个未解决的问题:imagemagick.org/discourse-server/viewtopic.php?t=22759
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2013-05-07
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      相关资源
      最近更新 更多