使用 im2pdf 操作图像旋转。参数没有按预期工作?

问题描述 投票:0回答:1

我正在尝试拍摄图像并将其转换为PDF,但是,当图像的exif数据中有旋转值时,我的pdf在转换后的pdf上也有旋转值。 我不想在 pdf 页面上有旋转值,而是希望旋转图像,因为它是根据图像的 exif 查看的,并且在 pdf 页面上没有任何旋转值。

我该如何实现这个目标? 我希望能够仅使用 img2pdf 来做到这一点。

我正在使用这个命令:

pdf_bytes = img2pdf.convert(io.BytesIO(response.content), rotation=img2pdf.Rotation.ifvalid, first_frame_only=True)

输入文件是: https://drive.google.com/file/d/1JyCBl5ulQmKIdQnVsvbNo7oNHX7oGIda/view?usp=sharing

输入文件根据 exif 数据具有 90CW 旋转。

但是,无论我是否使用rotation=img2pdf.Rotation.ifvalid生成pdf,生成的pdf都是相同的。为什么没有任何区别?

我的目标是根据 exif 旋转图像,并且 pdf 在 pdf 页面上没有任何旋转值。 我正在使用以下代码检查输出的页面旋转:

from pypdf import PdfReader

with open('abc.pdf', 'rb') as input_pdf:
    reader = PdfReader(input_pdf)
    
    # Iterate through each page and get the rotation value
    for page_num, page in enumerate(reader.pages):
        # Get the rotation value of the page
        rotation_value = page.get('/Rotate') or 0  # Default to 0 if not rotated
        
        print(f"Page {page_num + 1} is rotated by {rotation_value} degrees.")

输出:

Page 1 is rotated by 90 degrees.
python pdf img2pdf
1个回答
0
投票

Img2PDF 是无损的,因此它无法更改图像以匹配页面尺寸。

这部分是通过它的工作原理来解释的:-

img2pdf 直接将图像数据嵌入到 PDF 中,无需重新编码。因此,它仅将 PDF 格式视为图像数据的容器格式。在这些情况下,img2pdf 仅将文件大小增加 PDF 容器的大小(通常约为 500 到 700 字节)。由于仅复制数据而不重新编码,因此 img2pdf 通常也比这些输入格式的其他解决方案更快。

部分由软件作者提供:-

您的结论是正确的,img2pdf 目前无法在每个图像的基础上应用旋转。

但我也很犹豫是否要添加这样的功能。您提出的相同论点不仅可以用于图像旋转,还可以用于当前同时影响所有图像的所有其他设置。那么 img2pdf 是否应该添加一种方法来在每个图像的基础上指定以下内容?

作者愿意接受任何合理的补丁,只是不增加特定用途的复杂性。只需考虑指定命令行轮换的其他方法即可。 https://gitlab.mister-muffin.de/josch/img2pdf/issues/190

看看 imagemagick。他们确实支持类似 -r -90< , telling it to apply this only on images which are wider than high, thus effektively rotating selectively.

的语法

就我个人而言,我要么使用任何图像旋转(不使用魔法),然后无损插入,或者更好,接受图像旋转,然后使用 PDF 页面旋转。

© www.soinside.com 2019 - 2024. All rights reserved.