通过直接包含JPEG将图像转换为PDF格式。

img2pdf的Python项目详细描述


img2pdf
==


光栅图像到pdf的无损转换。如果
优先级为(按此顺序):

1,则应使用img2pdf。**始终无损**:嵌入pdf中的图像对于每个像素的颜色信息始终与输入的颜色信息完全相同。**small**:如果可能,输入图像
和输出pdf之间的文件大小差异将仅是pdf容器本身的开销
3。**fast**:如果可能的话,输入图像只是粘贴到pdf文档中
,而不需要对像素数据进行任何占用cpu的重新编码


传统的转换软件(如imagemagick)也可以:

1。不能是无损的,因为有损重新编码为jpeg
2。不小,因为使用浪费的原始像素数据平面编码
3。不要太快,因为输入数据被重新编码

因为原始像素数据永远不必加载到内存中。

|————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————|
TIFF(CCITT组4)单色直接
任何除CMYK和单色PNG PAETH
任何单色CCITT组4
任何CMYK|对于JPEG、JPEG2000、非隔行PNG和TIFF图像以及CCITT组4编码数据,IMG2PDF直接将图像数据嵌入到PDF中,而无需对其重新编码。因此,它仅将pdf格式视为
图像数据的容器格式。在这些情况下,img2pdf只会将文件大小增加pdf容器的大小
(通常大约500到700字节)。由于数据只有
复制而不是重新编码,因此对于这些输入格式,img2pdf通常也比其他
解决方案快。


对于所有其他输入类型,img2pdf首先必须将像素数据转换为
使其与pdf兼容。在大多数情况下,png paeth过滤器应用于
像素数据。对于单色输入,使用ccitt组4代替。仅对于
cmyk输入,在最终应用平面压缩之前不应用任何筛选器。


用法
----


必须将图像作为文件提供,因为img2pdf需要在文件
描述符中查找。

输出将
执行到标准输出。一个典型的调用是:

$img2 pdf img1.png img2.jpg-o out.pdf


可以通过运行以下命令访问详细文档:

$img2pdf--help


bugs
----

-如果您发现JPEG、JPEG2000、PNG或CCITT Group 4编码的TIFF文件,
当Adobe Acrobat Reader无法读取嵌入到PDF中时,
请与我联系。

-我尚未确定JPEG2000文件的颜色空间。因此,默认情况下,JPEG2000文件使用设备GB。对于带有其他颜色空间的JPEG2000
文件,必须使用
`--colorspace`选项显式指定它。

-不允许使用Alpha通道的输入图像。pdf不支持图像中的alpha
通道,因此,必须丢弃输入的alpha通道。但是img2pdf将始终是无损的,因此,输入图像必须
不携带透明信息.

-img2pdf使用pil(或枕头)获取图像元数据,并在必要时转换输入。为了防止解压缩炸弹拒绝服务攻击,
枕头限制了输入图像允许具有的最大像素数。如果您确定您知道自己在做什么,那么您可以通过将"--枕头极限中断"选项传递给img2pdf来禁用此保护。这个
允许处理非常大的输入图像。

如果您希望从源代码安装,可以运行:




使用virtualenv:

$cd img2pdf/
$virtualenv ve
$ve/bin/pip3安装。

从文件名
open("name.pdf","wb")为f:
f.write(img2pdf.convert("test.jpg"))

"wb")作为f:
f.write(img2pdf.convert("\x89png…")


"wb")作为f:
f.write(img2pdf.convert(["test1.jpg","test2.png"])

img2pdf.mm_to_pt(297))
layout_fun=img2pdf.get_layout_fun(a4inpt)
打开("name.pdf","wb")作为f:
f.write(img2pdf.convert('test.jpg',,layout_-fun=layout_-fun))


与imagemagick的比较
----


创建一个大的测试图像:

$convert logo:-调整8000x原始大小。jpg


使用imagemagick和img2pdf将其转换为pdf:

$time img2pdf original.jpg-o img2pdf.pdf
$time convert original.jpg imagemagick.pdf

请注意,imagemagick比img2pdf进行转换所花的时间要长一个数量级。它还使用了两倍的内存。

现在从两个pdf文档中提取图像数据并将其与
原始文档进行比较:

$pdfimages-all img2pdf.pdf tmp
$compare-metric ae original.jpg tmp-000.jpg null:
0
$pdfimages-all imagemagick.pdf tmp
$compare-metricae original.jpg tmp-000.jpg null:
118716


要使用imagemagick获得无损输出,我们可以使用zip压缩,但这会不必要地增加输出大小:


$convert original.jpg-压缩zip imagemagick.pdf
$pdfimages-all imagemagick.pdf tmp
$比较-metric ae original.jpg tmp-000.png空:
0
$stat--format="%s%n"original.jpg img2pdf.pdf imagemagick.pdf
1535837 original.jpg
1536683 img2pdf.pdf
9397809 imagemagick.pdf


默认情况下,从包含的图像到pdf的无损转换。
如果输入是jpeg,那么它只需将jpeg嵌入到pdf中,方法与img2pdf相同。但对于其他图像格式,它使用平面压缩
的纯像素数据,因此不必要地增加输出文件大小:

$convert logo:-调整8000x original.png的大小
$cat<;<;end>;pdflatex.tex
\documentclass{article}
\usep包装{graphicx}
\begin{document}
\includegraphics{original.png}
\end{document}
end
$pdflatex pdflatex.tex
$stat--format="%s%n"original.png pdflatex.pdf
4500182 original.png
9318120 pdflatex.pdf

ocr
--------

tesseract ocr最接近img2pdf提供的功能。它能够
将jpeg和png输入转换为pdf,而无需不必要地增加文件大小
,同时又是无损的。因此,如果您的输入是jpeg和png图像,那么
您应该能够安全地使用tesseract而不是img2pdf。对于其他输入,
tesseract可能不会进行无损转换。例如,它将cmyk
输入转换为rgb,并从具有透明度的图像中移除alpha通道。对于
多页tiff或动画gif,它将只转换第一帧。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
多线程试图找出线程和Java   java字符串池(字符串和字符串缓冲区)   java如何通过entryid从kaltura获取文件url   java如何通过Oracle服务总线重定向请求   java RecyclerView我最多只能添加一行   java如何防止Paho在处理来自代理的消息后发送ACK?   java从泛型方法调用重载方法   java如何使javac编译我的多语言程序   java Log4j不会在删除时重新创建文件   java如何设置Zk会话(org.zkoss.Zk.ui),以便对扩展GenericForwardComposer的控制器类进行单元测试   Java:为什么可以对通配符集合进行强制转换?   java如何将数据更新到从自定义视图类创建的对象,以便可以在自定义视图上绘制数据?   java如何解决在片段中使用意图时应用程序崩溃的问题?   java如何使来自JSP的Servlet调用更安全?   java在Lucene中索引正则表达式并搜索输入   java如何设置Jetty,使其与Tomcat对等,同时支持JSP和servlet?   java在检查和使用对话框输入时遇到问题   java Git可以在签出时更改文件吗?