将多页 PDF 转换为 TIFF 不适用于 Python 库 Wand
Converting multipage PDF to TIFF does not work with Python library Wand
给定简短的 5 页 PDF 文件(附在底部)和以下 python 转换为多页 TIFF 的代码:
from wand.image import Image
with Image(filename='5-page-pdf.pdf', resolution=200) as img:
img.type = "grayscale"
img.format = "tiff"
img.compression = "lzw"
img.save(filename="test.tiff")
生成一个 TIFF 文件,其中第 2-4 页看起来是深灰色(或透明)背景上的黑色文本。其他图像处理库无法打开或渲染文件。
使用 Wand 使用的 ImageMagick 转换同一个 PDF 效果很好
convert -density 200 5-page-pdf.pdf -type grayscale -compress lzw 5-page-pdf.tiff
这生成的文件可以与其他图像库一起使用,并且在 TIFF 查看器中看起来正确。
我试过删除 alpha 通道,我试过将背景颜色设置为 'White',还有一些其他的东西,但都无济于事。从 Wand 出来的 TIFF 总是乱码。如果在 ImageMagick 中可行,那么在 Wand 中也应该可行,对吧?我缺少什么参数或设置?
看起来设置 img.alpha_channel
属性 没有跨页面传播。
试试这个解决方法
from wand.api import library
from wand.image import Image
with Image(filename="5-page-pdf.pdf", resolution=200) as img:
img.type = 'grayscale'
img.compression = "lzw"
# Manually iterate over all page, and turn off alpha channel.
library.MagickResetIterator(img.wand)
for idx in range(library.MagickGetNumberImages(img.wand)):
library.MagickSetIteratorIndex(img.wand, idx)
img.alpha_channel = 'off'
img.save(filename="test.tiff")
给定简短的 5 页 PDF 文件(附在底部)和以下 python 转换为多页 TIFF 的代码:
from wand.image import Image
with Image(filename='5-page-pdf.pdf', resolution=200) as img:
img.type = "grayscale"
img.format = "tiff"
img.compression = "lzw"
img.save(filename="test.tiff")
生成一个 TIFF 文件,其中第 2-4 页看起来是深灰色(或透明)背景上的黑色文本。其他图像处理库无法打开或渲染文件。
使用 Wand 使用的 ImageMagick 转换同一个 PDF 效果很好
convert -density 200 5-page-pdf.pdf -type grayscale -compress lzw 5-page-pdf.tiff
这生成的文件可以与其他图像库一起使用,并且在 TIFF 查看器中看起来正确。
我试过删除 alpha 通道,我试过将背景颜色设置为 'White',还有一些其他的东西,但都无济于事。从 Wand 出来的 TIFF 总是乱码。如果在 ImageMagick 中可行,那么在 Wand 中也应该可行,对吧?我缺少什么参数或设置?
看起来设置 img.alpha_channel
属性 没有跨页面传播。
试试这个解决方法
from wand.api import library
from wand.image import Image
with Image(filename="5-page-pdf.pdf", resolution=200) as img:
img.type = 'grayscale'
img.compression = "lzw"
# Manually iterate over all page, and turn off alpha channel.
library.MagickResetIterator(img.wand)
for idx in range(library.MagickGetNumberImages(img.wand)):
library.MagickSetIteratorIndex(img.wand, idx)
img.alpha_channel = 'off'
img.save(filename="test.tiff")