【问题标题】:How can I render an image from a PDF with python as Microsoft Edge is doing?如何像 Microsoft Edge 那样使用 python 渲染 PDF 中的图像?
【发布时间】:2019-11-27 23:04:34
【问题描述】:

因此,当我使用 Wand 和 Python 从 PDF 生成 JPEG 时,我可以看到工作人员的某些线条大小不同,但是当我使用 MS Edge 缩放时,它们的大小相同......我不能找到同样的方法。

魔杖

开罗

第一种回答方法:

convert +antialias -density 1200 Betlem.pdf -alpha off -resize 640x -monochrome A_betlem_m_en_vull_anar.png

我尝试过 poppler、pdftocairo、pdf2(png¦svg)、inkscape 等...

pdf = wi(filename = "Betlem.pdf", resolution = 300)
pdfImage = pdf.convert("jpeg")
d = 1
for img in pdfImage.sequence:
   page = wi(image=img)
   page.save(filename="Betlem_" + str(d) + ".jpg")
   d += 1

我希望看到的结果是,我可以看到与 Edge(最佳)或 Firefox(出色)相同的缩放方式。

如下PDF:http://www.xn--estudiantladolaina-lvb.com/partitures/baixa/pdf/26

已编辑:

您可以看到由于 PDF 上的 SVG 信息中的错误,它是如何呈现糟糕的:

【问题讨论】:

  • 也许它们以不同的默认密度呈现。尝试为两者设置相同的密度。 Python Wand 使用 Imagemagick,后者又使用 Ghostscript。尝试使用 Ghostscript 直接渲染,并设置与使用其他工具渲染相同的密度。 Python 魔杖是 Python。那么当你说 Wand vs Python 时,你用的是什么?
  • 放大第一张图片,看看五线谱的大小是如何不同的。该图像是使用示例代码从 Wand 获得的 JPEG,分辨率为 300。第二张是光栅化图像,但由于源尺寸错误,结果很糟糕。我没有说 Wand vs Python,我说 ImageMagick vs Cairo...
  • 第二张图片不是第一张的结果,即使是相同的 PDF。它们来自不同的测试。
  • 使用ghostscript获得更好的结果,但甚至一些工作人员的行是行情。
  • 也许这两个系统以不同的方式呈现文本或使用不同的字体或字体规格。您是否将两个系统中的密度设置为相同?

标签: python image opencv pdf imagemagick


【解决方案1】:

使用 Imagemagick 6.9.10.55 Q16 Mac OSX 和 Ghostscript 9.25,我可以使用超级采样(4 倍标称 72 dpi 密度并将尺寸缩小 1/4 至正常比例)进行高质量转换

convert -density 288 A_betlem_m_en_vull_anar.pdf -alpha off -resize 25% A_betlem_m_en_vull_anar.png


这与您的 MS Edge 视图相比如何? (下载我的图片并查看)。

补充:

这是使用 Imagemagick 的 Python Wand 中的相同代码。

!/bin/python3.7

from wand.image import Image

with Image(filename='A_betlem_m_en_vull_anar.pdf', resolution=288) as img:
    img.alpha_channel='off'
    img.resize(width=int(0.25*img.width),height=int(0.25*img.height))
    img.save(filename='A_betlem_m_en_vull_anar.png')

【讨论】:

  • 嗯,首先谢谢。了解超级采样和缩小尺寸的方法非常酷。可悲的是,我需要光栅化图像。 MS Edge 不使用抗锯齿。 Edge 以大尺寸渲染来自 PDF 的 SVG 数据非常酷,就像 IM、Wand 和/或 GS 使用 1200dpi(高度和重量之间的最佳关系)所做的那样。我需要从最佳图像(1200dpi)光栅化图像并缩小比例。我编辑了这个问题,添加了我通过你的回答所做的结果。但我仍然没有给你正确的答案,因为问题更深层次:“我怎样才能将 SVG 渲染成小尺寸(640x)?”。
  • 我发现任何软件都无法正确渲染 PDF。可能 SVG 信息不正确,或者仅与抗锯齿兼容。因为当我放大(超级采样)时,我可以看到使软件算法删除或添加一些行的缺陷......
  • 什么 SVG?您提供了 PDF。他们使用不同的软件进行渲染。 SVG 使用 RSVG 或 Inkscape,PDF 使用 Imagemagick 中的 Ghostscript。
  • 谢谢。我在想 PDF 有 SVG 信息。真的它有Ghostscript。我正在尝试用另一种替换音乐符号的字体。
  • 字体可能嵌入在 PDF 中。我怀疑你需要一个 PDF 编辑器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多