[英]Storing jpg images into a pdf file in a "lossless" way
给定一个包含多个 jpg 文件(照片)的目录,我想创建一个 pdf 文件,每页一张照片。 但是,我希望将照片原封不动地存储在 pdf 文件中; 即,我想避免解码和重新编码。 所以理想情况下,我希望能够从 pdf 文件中提取原始 jpg 文件(可能减去元数据),使用例如 linux 命令行太像pdfimages
。
到目前为止我的想法:
imagemagick convert
。 但是,我对压缩选项感到困惑:如果我选择 100% quality
,是否意味着 jpg 在内部解码,然后进行无损编码? (这显然不是我想要的?)pdflatex
。 有人声称图形 package 包含无损图像,而其他人则对此表示异议。 无论如何,pdflatex 会稍微麻烦一些(我首先必须找出照片的尺寸,然后相应地设置页面大小,确保没有边距、标题等)。无损地将光栅图像转换为 PDF,无需重新编码 PNG、JPEG 和 JPEG2000 图像。 这导致 PNG、JPEG 和 JPEG2000 图像的无损转换,唯一增加的文件大小来自 PDF 容器本身。 其他光栅图形格式使用与 PNG 相同的编码无损存储。 由于 PDF 不支持具有透明度的图像,并且 img2pdf 旨在永不丢失,因此不支持具有 alpha 通道的输入图像。
( pdfimages -all
正好相反。)
您可以使用以下依赖于HexaPDF 的小脚本(注意:我是 HexaPDF 的作者)来执行此操作。
注意:确保你已经安装了 Ruby 2.4,然后运行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
。 大多数代码处理居中和缩放图像以很好地适应页面。
PoDoFo 提供了另一种以“无损”方式将 jpg 图像存储到pdf文件的可能性:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.