代码之家  ›  专栏  ›  技术社区  ›  Jakob

以“无损”方式将jpg图像存储到pdf文件中

  •  2
  • Jakob  · 技术社区  · 7 年前

    如果有一个包含几个jpg文件(照片)的目录,我会 然而,我希望照片被保存在pdf文件不变;i、 例如,我希望避免解码和重新编码。 pdfimages .

    到目前为止,我的想法是:

    • imagemagick convert quality ,这是否意味着jpg在内部解码,然后无损编码?(这显然不是我想要的?)
    • pdflatex . Some people claim 图形包包括无损图像,而 other dispute that . 在任何情况下,pdflatex都会稍微麻烦一些(我首先要找出照片的尺寸,然后相应地设置页面大小,确保没有边距、页眉等)。
    4 回复  |  直到 7 年前
        1
  •  6
  •   Geremia    3 年前

    img2pdf PyPI page ):

    JPEG2000图像。这导致了PNG、JPEG和JPEG2000的无损转换 仅添加文件大小的图像来自PDF容器本身。 其他光栅图形格式使用相同的编码无损存储 PNG使用的。因为PDF不支持具有透明度的图像 img2pdf旨在永不有损,具有alpha通道的输入图像不会有损

    pdfimages -all 恰恰相反。)

        2
  •  2
  •   gettalong    7 年前

    您可以使用以下小脚本,它依赖于 HexaPDF

    gem install hexapdf 安装hexapdf。

    以下是脚本:

    require 'hexapdf'
    
    doc = HexaPDF::Document.new
    
    ARGV.each do |image_file|
      image = doc.images.add(image_file)
      page = doc.pages.add
      iw = image.info.width.to_f
      ih = image.info.height.to_f                                                                                                                             
      pw = page.box(:media).width.to_f
      ph = page.box(:media).height.to_f
      rw, rh = pw / iw, ph / ih
      ratio = [rw, rh].min
      iw, ih = iw * ratio, ih * ratio
      x, y = (pw - iw) / 2, (ph - ih) / 2
      page.canvas.image(image, at: [x, y], width: iw, height: ih)
    end
    
    doc.write('images.pdf')
    

    images.pdf . 大多数代码都处理图像的居中和缩放,以很好地适应页面。

        3
  •  1
  •   K J    2 年前

    根据您希望对文件执行的操作,在windows上,如果图像是更简单的jpeg/gif/tif/png,您可以将其存储在cbz、zip、文件夹或压缩文件夹中,并使用SumatraPDF进行查看,SumatraPDF具有“另存为PDF”选项,因此所有操作都可以通过一个exe完成。

    enter image description here

    对于可查看但不能作为PDF输入的文件(如webp或heic),它将失败,因此请在查看器中检查之前的文件扩展名是什么。

    实际上,它在所有情况下都应该是无损的,但是您应该使用pdfimage进行往返-所有这些都是为了在输入和输出之间进行文件比较,以检查是否不需要转换任何字节。

        4
  •  0
  •   c72578 TcKs    2 年前

    PoDoFo

    podofoimg2pdf 通过将jpg文件嵌入PDF容器,可以执行从JPEG到PDF的无损转换。

    podofoimg2pdf
    Usage: podofoimg2pdf [output.pdf] [-useimgsize] [image1 image2 image3 ...]
    
    Options:
     -useimgsize    Use the imagesize as page size, instead of A4