PyMuPDF 1.24.4 中文文档(九)(1)

简介: PyMuPDF 1.24.4 中文文档(九)


原文:https://pymupdf.readthedocs.io/en/latest/

像素图

原文:pymupdf.readthedocs.io/en/latest/pixmap.html

像素图(“像素映射”)是 MuPDF 渲染能力的核心对象。它们代表平面矩形像素集。每个像素由几个字节(“组件”)描述其颜色,另外还有一个可选的透明度字节描述其透明度。

在 PyMuPDF 中,存在几种创建像素图的方法。除了第一种外,所有其他方法都作为重载的构造函数提供。可以创建像素图…

  1. 来自文档页面(方法Page.get_pixmap()
  2. 空的,基于 Colorspace 和 IRect 的信息
  3. 来自文件
  4. 来自内存中的图像
  5. 来自纯像素的内存区域
  6. 来自 PDF 文档中的图像
  7. 作为另一个像素图的副本

注意

支持多种图像格式作为上述第 3 和第 4 点的输入。请参阅“支持的输入图像格式”部分(#imagefiles)。

请查看 FAQ 部分,了解一些像素图的使用情况。

方法 / 属性 简短描述
Pixmap.clear_with() 清除像素图的部分内容
Pixmap.color_count() 确定使用的颜色数量
Pixmap.color_topusage() 确定最常用颜色的份额
Pixmap.copy() 复制另一个像素图的部分内容
Pixmap.gamma_with() 对像素应用伽马因子
Pixmap.invert_irect() 反转给定区域的像素
Pixmap.pdfocr_save() 将像素图保存为 OCRed 的单页 PDF
Pixmap.pdfocr_tobytes() 将像素图保存为 OCRed 的单页 PDF
Pixmap.pil_save() 使用 pillow 保存为图像
Pixmap.pil_tobytes() 使用 pillow 将其写入bytes对象
Pixmap.pixel() 返回像素值
Pixmap.save() 以多种格式保存像素图
Pixmap.set_alpha() 设置透明度值
Pixmap.set_dpi() 设置图像分辨率
Pixmap.set_origin() 设置像素图的 x、y 值
Pixmap.set_pixel() 设置像素的颜色和透明度
Pixmap.set_rect() 设置矩形内所有像素的颜色和透明度
Pixmap.shrink() 缩小大小并保持比例
Pixmap.tint_with() 对图像进行着色。
Pixmap.tobytes() 以多种格式返回内存区域。
Pixmap.warp() 返回从四边形内部生成的图像。
Pixmap.alpha 透明度指示器。
Pixmap.colorspace 图像的颜色空间,参见 颜色空间。
Pixmap.digest 图像的 MD5 哈希码。
Pixmap.height 图像高度。
Pixmap.interpolate 插值方法指示器。
Pixmap.is_monochrome 检查是否仅包含黑白颜色。
Pixmap.is_unicolor 检查是否仅出现一种颜色。
Pixmap.irect 图像矩形 (IRect)。
Pixmap.n 每像素字节。
Pixmap.samples_mv 像素区域的 memoryview
Pixmap.samples_ptr 指向像素区域的 Python 指针。
Pixmap.samples 像素区域的 bytes 副本。
Pixmap.size 图像的总长度。
Pixmap.stride 一行图像的大小。
Pixmap.width 图像宽度。
Pixmap.x 左上角的 X 坐标。
Pixmap.xres X 方向的分辨率。
Pixmap.y 左上角的 Y 坐标。
Pixmap.yres Y 方向的分辨率。

类 API

class Pixmap
__init__(self, colorspace, irect, alpha)

新的空白图像: 创建一个大小和原点由矩形指定的空白图像。因此,irect.top_left 指定了图像的左上角,其宽度和高度分别为 irect.widthirect.height。请注意,图像区域未初始化,可能包含垃圾数据 – 使用例如 clear_with()set_rect() 确保。

参数:

  • 颜色空间 (颜色空间) – 颜色空间。
  • irect类似 irect 的 irect) – 图像的位置和尺寸。
  • alpha布尔值) – 指定是否包括透明度字节。默认为 False
__init__(self, colorspace, source)

复制并设置颜色空间: 复制 图像并转换颜色空间。可以使用任何颜色空间组合,但源颜色空间不能为 None

参数:

  • colorspace (Colorspace) – 所需的目标颜色空间。这也可能是 None。在这种情况下,将创建一个“蒙版”像素图:其Pixmap.samples将仅包含源的 alpha 字节。
  • source (Pixmap) – 源像素图。
__init__(self, source, mask)
  • v1.18.18 新功能

复制并添加图像掩码: 复制source像素图,添加一个带有来自掩码像素图的透明度数据的 alpha 通道。

参数:

  • source (Pixmap) – 不带 alpha 通道的像素图。
  • mask (Pixmap) – 掩码像素图。必须是灰度像素图。
__init__(self, source, width, height[, clip])

复制并缩放: 复制source像素图,缩放到新的宽度和高度值 – 图像将相应地拉伸或缩小。支持部分复制。源颜色空间可以是None

参数:

  • source (Pixmap) – 源像素图。
  • width (float) – 目标宽度。
  • height (float) – 所需的目标高度。
  • clip (irect_like) – 将生成的像素图限制为缩放像素图的这个区域。

注意

如果宽度或高度不是整数(即value.is_integer() != True),那么生成的像素图将具有 alpha 通道

__init__(self, source, alpha=1)

复制并添加或删除 alpha: 复制source并添加或删除其 alpha 通道。如果alpha等于source.alpha,则是相同的副本。如果添加了 alpha 通道,则其值将设置为 255。

参数:

  • source (Pixmap) – 源像素图。
  • alpha (bool) – 目标是否带有 alpha 通道,默认且如果源颜色空间为None则为必须项。

注意

典型用法包括将颜色和透明度字节分离到单独的像素图中。某些应用程序需要此功能,例如wxPythonwx.Bitmap.FromBufferAndAlpha()

>>> # 'pix' is an RGBA pixmap
>>> pixcolors = pymupdf.Pixmap(pix, 0)    # extract the RGB part (drop alpha)
>>> pixalpha = pymupdf.Pixmap(None, pix)  # extract the alpha part
>>> bm = wx.Bitmap.FromBufferAndAlpha(pix.width, pix.height, pixcolors.samples, pixalpha.samples) 
__init__(self, filename)

从文件中创建:filename创建一个像素图。所有属性均从输入中推断。生成像素图的原点为*(0, 0)*。

参数:

filename (str) – 图像文件的路径。

__init__(self, stream)

从内存中创建: 从内存区域创建一个像素图。所有属性均从输入中推断。生成像素图的原点为*(0, 0)*。

参数:

stream (bytes*,bytearray,*BytesIO) –

包含完整有效图像的数据。例如可以通过stream = bytearray(open(‘image.file’, ‘rb’).read())创建。仅支持Python 3 中bytes类型,因为在 Python 2 中bytes == str,该方法将把流解释为文件名。

在版本 1.14.13 中更改: 现在也支持io.BytesIO

__init__(self, colorspace, width, height, samples, alpha)

从纯像素创建:samples创建一个像素图。每个像素必须由colorspacealpha参数控制的字节数表示。生成像素图的原点为*(0, 0)*。当某些其他程序提供原始图像数据时,此方法非常有用 - 请参见 FAQ。

参数:

  • colorspace (Colorspace) – 图像的颜色空间。
  • width (int) – 图像宽度
  • height (int) – 图像高度
  • samples (bytes*,bytearray,*BytesIO) –
    包含图像所有像素的区域。如果指定,必须包括 alpha 值。
    从版本 1.14.13 开始更改:(1)现在也可以使用io.BytesIO。(2)数据现在已被复制到像素图中,因此可以安全删除或变得不可用。
  • alphabool)– 是否包含透明通道。

注意

  1. 下列方程式 必须为真(colorspace.n + alpha) * width * height == len(samples)
  2. 从版本 1.14.13 开始,样本数据被复制到像素图中。
__init__(self, doc, xref)

从 PDF 图像中: 从以其xref标识的 PDF 文档doc中提取的图像创建一个像素图。所有像素图属性都由图像设置。请查看extract-img1.pyextract-img2.py,了解如何使用这些工具来恢复 PDF 的所有图像。

参数:

  • doc(Document)– 打开的PDF文档。
  • xrefint)– 图像对象的xref。例如,您可以使用Document.get_page_images()列出特定页面上使用的所有图像,并显示每个图像的xref编号。
clear_with([value[, irect]])

初始化样本区域。

参数:

  • valueint)– 如果指定,值从 0 到 255 有效。每个像素的每个颜色字节将设置为此值,如果存在 alpha 通道,则 alpha 将设置为 255(不透明)。如果省略,则所有字节(包括任何 alpha 通道)都将清除为0x00
  • irectirect_like)– 要清除的区域。如果还指定了value,则可以省略以清除整个像素图。如果颜色空间为CS_GRAY,则将采用平均值*(red + green + blue)/3*。像素图将在原地更改。
tint_with(black, white)

通过用sRGB 整数值替换黑色和/或白色来着色像素图。仅支持颜色空间CS_GRAYCS_RGB,其他颜色空间将被忽略并显示警告。

如果颜色空间是CS_GRAY,则将采用平均值*(red + green + blue)/3*。像素图将在原地更改。

参数:

  • 黑色int)– 用此值替换黑色。指定 0x000000 不会做任何更改。
  • 白色int)– 用此值替换白色。指定 0xFFFFFF 不会做任何更改。

示例:

  • tint_with(0x000000, 0xFFFFFF) 不起作用。

  • tint_with(0x00FF00, 0xFFFFFF) 将黑色改为绿色,保留白色不变。

  • tint_with(0xFF0000, 0x0000FF) 将黑色改为红色,白色改为蓝色。
gamma_with(gamma)

将伽马因子应用于像素图,即使图像变亮或变暗。颜色空间为None的像素图将被忽略并显示警告。

参数:

gammafloat)– gamma = 1.0 不起作用,gamma < 1.0 变亮,gamma > 1.0 变暗。

shrink(n)

将像素图的宽度和高度都除以 2:sup:n来缩小像素图。

参数:

n (整数) – 确定新像素图(样本)的大小。例如,值为 2 将宽度和高度除以 4,因此结果是原始大小的 1/16。小于 1 的值会被忽略并显示警告。

注意

使用这些方法可以保持比例减小像素图的大小。像素图会被“就地”修改。如果想要保留原始图像并且有更多细粒度的选择,可以使用上面的相应复制构造函数

pixel(x, y)

自版本 1.14.5 新增: 返回位于位置 (x, y)(列,行)的像素的值。

参数:

  • x (整数) – 像素的列数。必须在range(pix.width)内。
  • y (整数) – 像素的行数,必须在range(pix.height)内。

返回类型:

列表

返回值:

一个颜色值列表,可能还包括 alpha 值。其长度和内容取决于像素图的颜色空间和 alpha 的存在。对于 RGBA 像素图,结果可能是 [r, g, b, a]。所有项都是range(256)内的整数。

set_pixel(x, y, color)

自版本 1.14.7 新增: 操纵位于位置 (x, y)(列,行)的像素。

参数:

  • x (整数) – 像素的列数。必须在range(pix.width)内。
  • y (整数) – 像素的行数。必须在range(pix.height)内。
  • color (序列) – 作为整数序列给出的期望像素值,范围在range(256)内。序列的长度必须等于 Pixmap.n,其中包括任何 alpha 字节。
set_rect(irect, color)

自版本 1.14.8 新增: 将矩形的像素设置为一个值。

参数:

  • irect (irect_like) – 要用值填充的矩形。实际区域是该参数与 Pixmap.irect 的交集。对于空交集(或无效参数),不会发生任何更改。
  • color (序列) – 期望的值,作为range(256)内的整数序列给出。序列的长度必须等于 Pixmap.n,其中包括任何 alpha 字节。

返回类型:

布尔值

返回值:

如果矩形无效或与 Pixmap.irect 的交集为空,则为 False,否则为 True

注意

  1. 这种方法相当于对矩形中的每个像素执行 Pixmap.set_pixel(),但是如果涉及到许多像素,这显然速度更快
  2. 可以使用此方法类似于 Pixmap.clear_with() 来初始化具有特定颜色的像素图,例如: pix.set_rect(pix.irect, (255, 255, 0))(RGB 示例,将整个像素图着色为黄色)。
set_origin(x, y)
  • 新增于 v1.17.7

设置像素图左上角点的 x 和 y 值。

参数:

  • x (整数) – x 坐标
  • y (整数) – y 坐标
set_dpi(xres, yres)
  • 新增于 v1.16.17
  • v1.18.0 中更改: 将这些值保存为 PNG 图像时,现在会存储这些值。

设置 x 和 y 方向的分辨率(dpi)。

参数:

  • xres (整数) – x 方向的分辨率。
  • yres (整数) – y 方向的分辨率。
set_alpha(alphavalues, premultiply=1, opaque=None)
  • v 1.18.13 中更改

更改 alpha 值。像素图必须具有 alpha 通道。

参数:

  • alphavalues (bytes*,bytearray,*BytesIO) – 新的 alpha 值。如果提供,其长度必须至少为 width * height。如果省略 (None),则所有 alpha 值都设置为 255(不透明)。从版本 1.14.13 开始更改: 现在还接受 io.BytesIO
  • premultiply (bool) – v1.18.13 新增: 是否使用 alpha 值预乘颜色分量。
  • opaque (list*,*tuple) – 忽略 alpha 值,并将此颜色设置为完全透明。长度为 Pixmap.nrange(256) 整数序列。默认为 None。例如,RGB 的典型选择可能是 opaque=(255, 255, 255)(白色)。
invert_irect([irect])

反转 IRect irect 区域中所有像素的颜色。如果颜色空间为 None,则不会产生任何效果。

参数:

irect (irect_like) – 要反转的区域。省略以反转所有内容。

copy(source, irect)

复制源像素图的 irect 部分到此像素图的相应区域。这两个像素图可能具有不同的尺寸,并且每个都可以具有 CS_GRAYCS_RGB 颜色空间,但它们当前必须具有相同的 alpha 属性 [2]。复制机制会自动调整源和目标之间的差异,方法如下:

如果从 CS_GRAY 复制到 CS_RGB,源灰阶值将放入每个 RGB 组件字节中。如果反过来,则目标的灰阶值将取为 (r + g + b) / 3

首先计算 irect 和目标像素图矩形的“交集”。这考虑了矩形坐标以及当前属性值 Pixmap.xPixmap.y(您可以通过 Pixmap.set_origin() 自由修改以达到此目的)。然后复制此交集的相应数据。如果交集为空,则什么也不会发生。

参数:

  • source (Pixmap) – 源像素图。
  • irect (irect_like) – 要复制的区域。

注意

示例:假设您有两个像素图 pix1pix2,您想将 pix2 的右下角四分之一复制到 pix1,使其从 pix1 的左上角点开始。请使用以下代码片段:

>>> # safeguard: set top-left of pix1 and pix2 to (0, 0)
>>> pix1.set_origin(0, 0)
>>> pix2.set_origin(0, 0)
>>> # compute top-left coordinates of pix2 region to copy
>>> x1 = int(pix2.width / 2)
>>> y1 = int(pix2.height / 2)
>>> # shift top-left of pix2 such, that the to-be-copied
>>> # area starts at (0, 0):
>>> pix2.set_origin(-x1, -y1)
>>> # now copy ...
>>> pix1.copy(pix2, (0, 0, x1, y1)) 


save(filename, output=None, jpg_quality=95)
  • v1.22.0 中更改:直接支持 JPEG 图像。可以通过参数 “jpg_quality” 控制图像质量。

将像素图保存为图像文件。根据选择的输出,仅支持一些或所有颜色空间,并且可以选择不同的文件扩展名。请参见下表。

参数:

  • filename (str*,Path,*file) – 要保存到的文件。可以提供为字符串,作为 pathlib.Path 或作为 Python 文件对象。在后两种情况下,文件名取自相应的对象。文件名的扩展名确定图像格式,可以通过输出参数覆盖。
  • output (str) – 所需的图像格式。默认为文件名的扩展名。如果此值和文件扩展名都不受支持,则会引发异常。可能的值请参阅 支持的输出图像格式。
  • jpg_quality (int) – 所需的图像质量,默认为 95。仅适用于 JPEG 图像,否则忽略。此参数在质量和文件大小之间进行权衡。值为 98 接近无损。更高的值不应导致更好的质量。

引发:

ValueError – 不支持的图像格式。

tobytes(output='png', jpg_quality=95)
  • 从版本 1.14.5 新增:将像素图作为指定格式的 bytes 内存对象返回 – 类似于 save()
  • 自 v1.22.0 版本更改:添加 直接的 JPEG 支持。可以通过新参数“jpg_quality”影响图像质量。

参数:

  • output (str) – 所需的图像格式。默认为“png”。可能的值请参阅 支持的输出图像格式。
  • jpg_quality (int) – 所需的图像质量,默认为 95。仅适用于 JPEG 图像,否则忽略。此参数在质量和文件大小之间进行权衡。值为 98 接近无损。更高的值不应导致更好的质量。
  • output – 请求的图像格式。默认为“png”。其他可能的值请参阅 支持的输出图像格式。

引发:

ValueError – 不支持的图像格式。

返回类型:

字节

pdfocr_save(filename, compress=True, language='eng', tessdata=None)
  • 自 v1.19.0 新增
  • 自 v1.22.5 版本更改:支持 Tesseract 的 tessdata 的新参数。

使用 Tesseract 执行文本识别,并将图像保存为带有 OCR 文本层的 1 页 PDF。

参数:

  • filename (str*,*fp) – 要保存的文件标识。可以是字符串,也可以是以“wb”打开的文件指针(包括 io.BytesIO() 对象)。
  • compress (bool) – 是否压缩生成的 PDF,默认为 True
  • language (str) – 图像中出现的语言。必须以 Tesseract 格式指定。默认为“eng”表示英语。对于多种语言,请使用以“+”分隔的 Tesseract 语言代码,如“eng+spa”表示英语和西班牙语。
  • tessdata (str) – Tesseract 语言支持的文件夹名称。如果省略,则必须存在此信息作为环境变量 TESSDATA_PREFIX

注意

如果未安装 Tesseract 或者环境变量“TESSDATA_PREFIX”未设置为 tessdata 文件夹名称且未作为参数提供,则会失败。

pdfocr_tobytes(compress=True, language='eng', tessdata=None)
  • 自 v1.19.0 新增
  • 自 v1.22.5 版本更改:支持 Tesseract 的 tessdata 的新参数。

使用 Tesseract 执行文本识别,并将图像转换为带有 OCR 文本层的单页 PDF。内部调用 Pixmap.pdfocr_save()

返回:

内存中的单页 PDF 文件。可以像这样打开 doc=pymupdf.open("pdf", pix.pdfocr_tobytes()),并可以在其上执行文本提取 page=doc[0]

注意

另一个可能的用途是插入到某些 PDF 中。以下代码片段读取文件夹中的图像,并将其存储为包含 OCR 文本层的新 PDF 的页面:

doc = pymupdf.open()
for imgfile in os.listdir(folder):
   pix = pymupdf.Pixmap(imgfile)
   imgpdf = pymupdf.open("pdf", pix.pdfocr_tobytes())
   doc.insert_pdf(imgpdf)
   pix = None
   imgpdf.close()
doc.save("ocr-images.pdf") 
pil_save(*args, unmultiply=False, **kwargs)
  • 新功能在 v1.17.3 中引入。

使用 Pillow 将像素图写入图像文件。用此方法输出 MuPDF 不支持的内容。示例包括:

  • 格式 JPX、J2K、WebP 等。
  • 存储 EXIF 信息。
  • 如果未提供 dpi 信息,则将自动使用像素图存储的 xresyres 值。

简单示例:pix.pil_save("some.webp", optimize=True, dpi=(150, 150))

参数:

unmultiply (bool) – 如果像素图的颜色空间为 RGB 且带有透明度,则 alpha 值可能已经或未经过乘入颜色分量 ref/green/blue(称为“预乘 alpha”)。若要强制取消预乘,将此参数设置为 True。有关背景信息,请参阅例如此处的“预乘 alpha” 页面

有关其他参数的详细信息,请参阅 Pillow 文档。

自 v1.22.0 起,PyMuPDF 直接支持 JPEG 输出。基于性能原因和避免不必要的外部依赖,我们建议不再使用此方法进行 JPEG 输出。

抛出异常:

ImportError – 如果未安装 Pillow。

pil_tobytes(*args, unmultiply=False, **kwargs)
  • 新功能在 v1.17.3 中引入。

使用 Pillow 返回指定格式的图像作为字节对象。例如 stream = pix.pil_tobytes(format="WEBP", optimize=True, dpi=(150, 150))。同样请参阅上文。有关其他参数的详细信息,请参阅 Pillow 文档。

抛出异常:

ImportError – 如果未安装 Pillow。

返回类型:

字节

warp(quad, width, height)
  • 新功能在 v1.19.3 中引入。

返回通过“扭曲”四边形以使四边形角点成为新像素图角点的新像素图。目标像素图的 IRect 将是 (0, 0, width, height)

参数:

  • quad (quad_like) – 一个凸四边形,其坐标位于 Pixmap.irect 内(包括边界点)。
  • width (int) – 期望的结果宽度。
  • height (int) – 期望的结果高度。

返回:

新的像素图,在四边形角点以顺时针方向映射到像素图的角点:quad.ul -> irect.tlquad.ur -> irect.tr,等等。

返回类型:

Pixmap


color_count(colors=False, clip=None)
  • 新功能在 v1.19.2 中引入。
  • 在 v1.19.3 中更改。

确定像素图的唯一颜色及其计数。

参数:

  • colors (bool) – (在 v1.19.3 中更改) 如果为 True,返回颜色像素及其使用计数的字典,否则仅返回唯一颜色的数量。
  • cliprect_like) – Pixmap.irect 内的一个矩形。如果提供,则仅考虑这些像素。这允许直接检查给定像素图的子矩形,而无需构建子像素图。

返回类型:

字典或整型

返回:

要么颜色数量,要么带有 pixel: count 项目的字典。像素键是长度为 Pixmap.nbytes 对象。

注意

要恢复像素的元组,使用 tuple(colors.keys()[i]) 获取第 i 项。

  • 响应时间取决于像素图的样本大小,对于非常大的像素图可能超过一秒钟。
  • 在适用的情况下,具有不同 alpha 值的像素将被视为不同颜色。
color_topusage(clip=None)
  • 新功能,版本号为 v1.19.3

返回最常用的颜色及其相对频率。


PyMuPDF 1.24.4 中文文档(九)(2)https://developer.aliyun.com/article/1559625

相关文章
|
4月前
|
XML 数据安全/隐私保护 数据格式
PyMuPDF 1.24.4 中文文档(七)(3)
PyMuPDF 1.24.4 中文文档(七)
112 0
|
4月前
|
存储 文字识别 自然语言处理
PyMuPDF 1.24.4 中文文档(五)(2)
PyMuPDF 1.24.4 中文文档(五)
115 3
|
4月前
PyMuPDF 1.24.4 中文文档(五)(1)
PyMuPDF 1.24.4 中文文档(五)
65 3
|
4月前
|
存储 XML 编解码
PyMuPDF 1.24.4 中文文档(三)(2)
PyMuPDF 1.24.4 中文文档(三)
101 0
PyMuPDF 1.24.4 中文文档(三)(2)
|
4月前
|
存储 Python
PyMuPDF 1.24.4 中文文档(四)(4)
PyMuPDF 1.24.4 中文文档(四)
53 0
|
4月前
|
存储 XML 编解码
PyMuPDF 1.24.4 中文文档(三)(1)
PyMuPDF 1.24.4 中文文档(三)
155 0
|
4月前
|
XML 存储 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(五)(4)
PyMuPDF 1.24.4 中文文档(五)
71 0
|
4月前
|
安全 API 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(一)(5)
PyMuPDF 1.24.4 中文文档(一)
98 3
PyMuPDF 1.24.4 中文文档(一)(5)
|
4月前
|
XML 存储 编解码
PyMuPDF 1.24.4 中文文档(八)(5)
PyMuPDF 1.24.4 中文文档(八)
271 1
PyMuPDF 1.24.4 中文文档(八)(5)
|
4月前
|
XML 存储 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(七)(5)
PyMuPDF 1.24.4 中文文档(七)
47 0