TL;DR:JPEG 和 PDF 之间的往返转换中文件大小加倍。使用的工具:poppler
和imagemagick
我正在做这个
- 从仅包含图像(扫描文档)的 pdf 中提取图像,
pdfimags
通过poppler
- 进行无损编辑(旋转)(或不执行任何操作)
- 将图像转换为pdf,via
imagemagick
(由于某些平台相关问题,我无法使用img2pdf)
Original 16M
Images 32M (Few kb images were deleted)
Final 33M
提取时图像大小加倍。假设发生了某种解压缩,为什么在制作PDF时不能将它们无损压缩回来?
编辑:
- 尝试
-compress
使用LZW
,在 4 倍时间后生成 150M 文件。 - 试过了
-page A4
,没有变化。
命令:
$ pdfimages -all Scanneddoc.pdf ./a
$ rm a-001.jpg
$ mogrify -rotate -90 a-*.jpg
$ convert a*.jpg Rotated.pdf
文件信息:
pdfimages -list input
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 260 260 rgb 3 8 jpeg no 8 0 851 851 9.91K 5.0%
1 1 image 3184 2020 rgb 3 8 jpeg no 11 0 272 272 674K 3.6%
2 2 image 260 260 rgb 3 8 jpeg no 16 0 851 851 9.91K 5.0%
2 3 image 2556 2968 rgb 3 8 jpeg no 19 0 309 309 740K 3.3%
3 4 image 260 260 rgb 3 8 jpeg no 24 0 851 851 9.91K 5.0%
3 5 image 2500 3052 rgb 3 8 jpeg no 27 0 303 303 684K 3.1%
4 6 image 260 260 rgb 3 8 jpeg no 32 0 851 851 9.91K 5.0%
4 7 image 2392 1372 rgb 3 8 jpeg no 35 0 205 205 242K 2.5%
5 8 image 260 260 rgb 3 8 jpeg no 40 0 851 851 9.91K 5.0%
5 9 image 2360 3148 rgb 3 8 jpeg no 43 0 286 286 714K 3.3%
pdfimages -list output
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 2020 3184 rgb 3 8 jpeg no 8 0 272 272 615K 3.3%
2 1 image 2968 2556 rgb 3 8 jpeg no 22 0 359 359 1741K 7.8%
3 2 image 3052 2500 rgb 3 8 jpeg no 36 0 369 370 1610K 7.2%
4 3 image 1372 2392 rgb 3 8 jpeg no 50 0 205 205 509K 5.3%
5 4 image 3148 2360 rgb 3 8 jpeg no 64 0 381 381 1493K 6.9%
澄清:解决方案和评论强调图像的旋转。需要明确的是,问题在于图像尺寸较大,因此不旋转也无济于事。虽然有损变换可能会妨碍有效压缩,导致尺寸过大,但问题确实出在提取部分。
PDF 和 JPEG 经常一起使用。由于 JPEG 通常以其原始格式存储为整个组件插入。而 TIF、GIF、PNG 和任何其他像素化图像都会发生显着变化。
因此,提取的 JPG 通常会以其源的不同密度插入,并且在没有 dpi 的情况下提取时,它将是字节完美的(100% 往返)。
PDF 的优点之一是它忽略 EXIF 方向并以任何比例、任何角度旋转图像。因此,旋转页面不会以任何方式改变图像,提取的图像在插入和提取时将具有完全相同的哈希值。
然而,图像无损旋转必须以不同的方式对 JPEG 图像内部产生附带损害。
最小的损害是如果存在带有方向的 EXIF 块,则只需更改这些字节即可。但如果你想重新定位像素,它不可避免地会破坏一些东西。例如,一张图像通过不同的无损 JPEG 旋转器。
显然,最好的是经过最长时间开发的开源产品。然而,转换中颜色的数量减少了,但文件大小增加了最小量。
因此,在 PDF 中往返 JPEG 进行旋转的正确方法是不更改图像,仅更改其 EXIF 或更简单地旋转 PDF 页面并在新文件中重复使用。
因此,这里运行的是源 200 dpi JPEG 始终相同,没有任何字节更改,但横向扫描缩小了页面大小(A4 到 A5)并在保存为 PDF 之前旋转为纵向。
如上所示,JPEG 由 pdfimages -all 提取并弹回其自然状态(200 dpi A4),然后我们可以重新插入到页面,它将完全相同。唯一的区别是 PDF 载体有一些额外的字节来描述新的布局。
515426 已增加到 515482,甚至可以压缩到更小的几个字节,因为它是一个 CMD 文件,可以使用操作系统命令进行文本转换。
摘要 200 dpi 图像没有任何变化。报告的图像像素 PPI 密度因 SCALE 的不同而不同。两个图像都是直立的,两个页面都是直立的。
它是在不同对象比例的页面内进行旋转的图像渲染。
使用
-j (write JPEG images as JPEG files)
而不是-all (equivalent to -png -tiff -j -jp2 -jbig2 -ccitt)
在 中产生合理的输出pdfimages
。注意:任何寻找如何有效地就地旋转 pdf 页面/图像的人都可以在U&LSE中看到这个问题