位图#
位图(“像素图”)是MuPDF渲染能力的核心对象。它们表示平面矩形像素集合。每个像素由几个字节(“组件”)描述其颜色,并有一个可选的 alpha 字节定义其透明度。
在PyMuPDF中,有几种方法可以创建一个pixmap。除了第一种,其余的都可以作为重载构造函数使用。可以创建一个pixmap …
从文档页面 (方法
Page.get_pixmap())为空,基于 Colorspace 和 IRect 信息
从文件中
从内存中的图像
从一块纯像素的内存区域
从 PDF 文档中的图像
作为另一个位图的副本
注意
支持多种图像格式作为上面第3和第4点的输入。请参见
查看常见问题解答部分,了解一些像素映像使用的“实际情况”。
方法 / 属性 |
简短描述 |
|---|---|
清除位图的部分 |
|
确定已使用的颜色 |
|
确定最常用颜色的比例 |
|
复制另一个像素图的部分 |
|
将伽马因子应用于像素图 |
|
翻转给定区域的像素 |
|
将位图保存为一页OCR PDF |
|
将位图保存为OCR处理的单页PDF |
|
创建一个Pillow图像 |
|
保存为Pillow图像 |
|
作为Pillow图像写入 |
|
返回一个像素的值 |
|
以多种格式保存位图 |
|
设置透明度值 |
|
设置图像分辨率 |
|
设置pixmap的x,y值 |
|
设置一个像素的颜色和透明度 |
|
设置矩形内所有像素的颜色和透明度 |
|
在保持比例的情况下减小大小 |
|
给位图着色 |
|
返回一个内存区域,支持多种格式 |
|
返回一个由内部四边形生成的图像 |
|
透明度指示器 |
|
位图的 Colorspace |
|
pixmap的MD5哈希码 |
|
位图高度 |
|
插值方法指示符 |
|
检查是否仅出现黑白 |
|
检查是否仅出现一种颜色 |
|
IRect 的位图 |
|
每个像素的字节数 |
|
|
|
指向像素区域的Python指针 |
|
|
|
pixmap的总长度 |
|
一行图像的大小 |
|
位图宽度 |
|
左上角的X坐标 |
|
在X方向上的分辨率 |
|
左上角的Y坐标 |
|
Y方向的分辨率 |
类 API
- class Pixmap#
- __init__(self, colorspace, irect, alpha=False)#
新建空白位图: 创建一个大小和起点由矩形给定的空白位图。因此,irect.top_left 指定了位图的左上角,其宽度和高度分别为 irect.width 和 irect.height。请注意,图像区域未初始化,将包含无效数据 – 使用例如
clear_with()或set_rect()来确保。- Parameters:
颜色空间 (颜色空间) – 颜色空间。
直接 (直接类似) – 像素图的位置和尺寸。
alpha (bool) – 指定是否应包含透明度字节。 默认值为 False。
- __init__(self, colorspace, source)#
复制并设置颜色空间: 复制 source 像素图并转换颜色空间。任何颜色空间组合都是可能的,但源颜色空间必须不是 None。
- Parameters:
colorspace (颜色空间) – 所需的 目标 颜色空间。这个 也可以是 无。在这种情况下,会创建一个“遮罩”位图:它的
Pixmap.samples将仅包含源的 alpha 字节。源 (Pixmap) – 源图形。
- __init__(self, source, mask)#
v1.18.18中的新内容
复制并添加图像蒙版: 复制 源 像素图,添加一个具有来自蒙版像素图的透明度数据的 alpha 通道。
- __init__(self, source, width, height[, clip])#
复制和缩放: 复制 源 位图,缩放新的宽度和高度值 – 图像将相应地显得被拉伸或缩小。支持部分复制。源颜色空间可能是 无。
- Parameters:
源 (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。
- Parameters:
源 (Pixmap) – 源位图。
alpha (bool) – 目标是否将具有 alpha 通道,默认为必需,如果源色彩空间为 None。
注意
一个典型的用法包括在单独的像素图中分离颜色和透明度字节。一些应用程序需要这样做,例如 wx.Bitmap.FromBufferAndAlpha() 的 wxPython:
>>> # '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)#
来自文件: 从 文件名 创建一个位图。所有属性均从输入推断。生成的位图的原点是 (0, 0)。
- Parameters:
filename (str) – 图像文件的路径。
- __init__(self, stream)#
来自内存: 从内存区域创建一个位图。所有属性都是从输入中推断出来的。结果位图的原点是 (0, 0)。
- Parameters:
stream (bytes,bytearray,BytesIO) –
包含完整有效图像的数据。例如可以通过 stream = bytearray(open(‘image.file’, ‘rb’).read()) 创建。类型 bytes 仅在 Python 3 中支持,因为在 Python 2 中 bytes == str,此方法会将流解释为文件名。
在版本 1.14.13 中更改: 现在也支持 io.BytesIO。
- __init__(self, colorspace, width, height, samples, alpha)#
从普通像素: 从样本创建一个点阵图。每个像素必须由一定数量的字节表示,这由色彩空间和透明度参数控制。生成的点阵图的原点是(0, 0)。当其他程序提供原始图像数据时,此方法非常有用 – 请参见常见问题。
- Parameters:
颜色空间 (颜色空间) – 图像的颜色空间。
width (int) – 图像宽度
height (int) – 图像高度
样本 (字节,字节数组,BytesIO) –
包含图像所有像素的区域。如果指定,必须包含 alpha 值。
在版本 1.14.13 中更改: (1) io.BytesIO 现在也可以使用。 (2) 数据现在被复制到图像图,因而可以安全删除或变得不可用。
alpha (bool) – 是否包含透明度通道。
注意
以下方程 必须为真: (colorspace.n + alpha) * width * height == len(samples).
从版本 1.14.13 开始,样本数据被 复制 到图像中。
- __init__(self, doc, xref)#
来自PDF图像: 从PDF中包含的图像创建一个像素图 文档,通过其
xref进行识别。所有的pimap属性都由图像设置。查看extract-img1.py和extract-img2.py,了解如何使用此方法恢复PDF中的所有图像。- Parameters:
文档 (文档) – 一个打开的 PDF 文档。
xref (int) – 一个图像对象的
xref。例如,您可以使用Document.get_page_images()创建特定页面上使用的图像列表,这也会显示每个图像的xref编号。
- clear_with([value[, irect]])#
初始化样本区域。
- Parameters:
value (int) – 如果指定,0 到 255 的值都是有效的。每个像素的每个颜色字节将被设置为此值,而 alpha 将被设置为 255(不透明),如果存在。如果省略,则所有字节(包括任何 alpha)都清除为 0x00。
irect (irect_like) – 要清除的区域。省略以清除整个位图。只能在指定value时指定。
- tint_with(black, white)#
通过将黑色和/或白色替换为给定的sRGB整数值来为像素图着色。只支持颜色空间
CS_GRAY和CS_RGB,其他颜色空间将被忽略并发出警告。如果颜色空间是
CS_GRAY,那么将取平均值 (红色 + 绿色 + 蓝色)/3。像素图将原地修改。- Parameters:
黑色 (整型) – 用这个值替换黑色。指定 0x000000 不会造成任何改变。
白色 (int) – 用这个值替换白色。指定 0xFFFFFF 不会产生任何变化。
示例:
tint_with(0x000000, 0xFFFFFF)是一个无操作。tint_with(0x00FF00, 0xFFFFFF)将黑色变为绿色,保留白色不变。tint_with(0xFF0000, 0x0000FF)将黑色变为红色,将白色变为蓝色。
- gamma_with(gamma)#
对位图应用伽玛因子,即使其变亮或变暗。颜色空间为 None 的位图会被忽略,并会发出警告。
- Parameters:
gamma (float) – gamma = 1.0 没有任何效果, gamma < 1.0 使图像变亮, gamma > 1.0 使图像变暗。
- shrink(n)#
通过将其宽度和高度都除以 2 来缩小位图:
n.- Parameters:
n (int) – 确定新的图像(样本)大小。例如,值为2将宽度和高度除以4,从而导致大小为原始图像的1/16。小于1的值会被忽略,并会发出警告。
注意
使用此方法来缩小图像的大小,同时保持其比例。图像会“就地”更改。如果您想保留原始图像并且还有更多细致的选择,请使用上面的相应复制构造函数。
- pixel(x, y)#
版本新特性:: 1.14.5: 返回位置 (x, y) (列,行) 的像素值。
- Parameters:
x (int) – 像素的列号。必须在
range(pix.width)范围内。y (int) – 像素的行号,必须在
range(pix.height)范围内。
- Return type:
列表
- Returns:
一系列颜色值,以及可能的 alpha 值。它的长度和内容取决于 pixmap 的颜色空间和 alpha 的存在。对于 RGBA pixmap,结果例如为 [r, g, b, a]。所有项都是
range(256)中的整数。
- set_pixel(x, y, color)#
在版本 1.14.7 中的新功能: 操作位于 (x, y)(列,行)位置的像素。
- Parameters:
x (int) – 像素的列号。必须在
range(pix.width)范围内。y (int) – 像素的行号。必须在
range(pix.height)之内。color (sequence) – 作为整数序列给定的期望像素值,范围为
range(256)。序列的长度必须等于Pixmap.n,该值包括任何阿尔法字节。
- set_rect(irect, color)#
版本 1.14.8 新增: 将矩形的像素设置为一个值。
- Parameters:
irect (irect_like) – 要用值填充的矩形。实际区域是该参数与
Pixmap.irect的交集。对于空交集(或无效参数),将不会发生任何变化。color (sequence) – 所需值,作为一系列整数给出,范围在
range(256)之内。序列的长度必须等于Pixmap.n,其中包括任何 alpha 字节。
- Return type:
布尔值
- Returns:
如果矩形无效或与
Pixmap.irect之间有空交集,则返回 False,否则返回 True。
注意
此方法等同于
Pixmap.set_pixel()对矩形内每个像素执行,但如果涉及许多像素,则显然快得多。此方法可以类似于
Pixmap.clear_with()使用,以某种颜色初始化一个 pixmap,像这样: pix.set_rect(pix.irect, (255, 255, 0)) (RGB 示例,将整个 pixmap 着色为黄色)。
- set_origin(x, y)#
v1.17.7中的新功能
设置位图左上角的 x 和 y 值。
- Parameters:
x (int) – x 坐标
y (int) – y坐标
- set_dpi(xres, yres)#
v1.16.17 新功能
在v1.18.0中更改:现在保存为PNG图像时,这些值将被存储。
设置x和y方向的分辨率(dpi)。
- Parameters:
xres (int) – x方向的分辨率。
yres (int) – y方向的分辨率。
- set_alpha(alphavalues, premultiply=1, opaque=None)#
在 v 1.18.13 中更改
改变 alpha 值。位图必须具有 alpha 通道。
- Parameters:
alphavalues (字节,字节数组,BytesIO) – 新的透明度值。如果提供,长度必须至少为 宽度 * 高度。如果省略 (
None),所有透明度值都设置为 255(无透明度)。 在版本 1.14.13 中更改: io.BytesIO 现在也被接受。premultiply (bool) – 在 v1.18.13 中新增: 是否将颜色组件与 alpha 值进行预乘。
不透明 (列表,元组) – 忽略 alpha 值并将此颜色设置为完全透明。一个长度为
Pixmap.n的整数序列,范围在range(256)之内。默认值为 None。例如,RGB 的典型选择是opaque=(255, 255, 255)(白色)。
- invert_irect([irect])#
反转IRect irect中所有像素的颜色。如果颜色空间为None,将没有效果。
- Parameters:
反向 (反向类似) – 要被反转的区域。省略以反转所有内容。
- copy(source, irect)#
将源位图的直接部分复制到此位图的相应区域。两个位图可能具有不同的尺寸,并且可以各自具有
CS_GRAY或CS_RGB颜色空间,但它们当前必须具有相同的alpha属性[2]。复制机制会自动调整源和目标之间的不一致,如下所示:如果从
CS_GRAY复制到CS_RGB,源灰度值将被放入每个 rgb 组件字节中。如果反过来,(r + g + b) / 3 将被作为目标的灰度值。在irect和目标像素图的矩形之间,首先计算一个“交集”。这考虑了矩形坐标和当前属性值
Pixmap.x和Pixmap.y(您可以通过Pixmap.set_origin()自由修改这些值)。然后,复制该交集的相应数据。如果交集为空,则不会发生任何事情。- Parameters:
源 (位图) – 源位图。
irect (irect_like) – 要复制的区域。
注意
示例:假设您有两个位图,
pix1和pix2,您希望将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”进行控制。
将图像作为文件保存。根据选择的输出,仅支持某些或所有颜色空间,并可以选择不同的文件扩展名。请参见下表。
- Parameters:
filename (str,Path,file) – 要保存的文件。可以作为字符串提供,也可以作为
pathlib.Path或 Python 文件对象提供。在后两种情况下,文件名来自相应的对象。文件名的扩展名决定了图像格式,可以通过输出参数覆盖。输出 (str) – 所需的图像格式。默认是文件名的扩展名。如果这两个值和文件扩展名都不支持,将引发异常。有关可能的值,请参见 支持的输出图像格式。
jpg_quality (int) – 所需的图像质量,默认为95。仅适用于JPEG图像,否则被忽略。该参数在质量与文件大小之间进行权衡。值为98接近无损。更高的值不应导致更好的质量。
- Raises:
ValueError – 对于不支持的图像格式。
- tobytes(output='png', jpg_quality=95)#
版本 1.14.5 中的新内容:将位图作为指定格式的 bytes 内存对象返回 - 类似于
save()。在 v1.22.0 中更改:添加了 直接 JPEG 支持。图像质量可以通过新参数“jpg_quality”进行影响。
- pdfocr_save(filename, compress=True, language='eng', tessdata=None)#
v1.19.0中的新功能
在版本1.22.5中更改:支持Tesseract的tessdata的新参数。
使用Tesseract执行文本识别并将图像保存为带有OCR文本层的1页PDF。
- Parameters:
filename (str,fp) – 指定要保存的文件。可以是字符串,也可以是以“wb”模式打开的文件指针(包括
io.BytesIO()对象)。compress (bool) – 是否压缩生成的PDF,默认是
True。语言 (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文本层的1页PDF。内部调用
Pixmap.pdfocr_save()。- Returns:
一个在内存中的1页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_image()#
从图像位图创建一个Pillow图像。必须安装PIL / Pillow。
- Raises:
导入错误 - 如果未安装Pillow。
- Returns:
一个 ˇˇPIL.Imageˇˇ 对象
- pil_save(*args, unmultiply=False, **kwargs)#
使用Pillow将位图写入图像文件。对于MuPDF不支持的输出,请使用此方法。示例包括
格式 JPX, J2K, WebP, 等等。
存储EXIF信息。
如果您不提供dpi信息,则与位图存储的值xres、yres会自动使用。
一个简单的例子:
pix.pil_save("some.webp", optimize=True, dpi=(150, 150)).- Parameters:
unmultiply (bool) – 如果图像的颜色空间是带透明度的RGB,则 alpha 值可能已经与颜色分量 ref/green/blue 相乘(称为“预乘”)。要强制取消预乘,请将此参数设置为
True. 要了解一些背景,例如,可以在这里查找“预乘 alpha”。
有关其他参数的详细信息,请参阅Pillow文档。
从 v1.22.0 开始,PyMuPDF 直接支持 JPEG 输出。我们建议不再使用这种方法进行 JPEG 输出 - 出于性能原因和避免不必要的外部依赖。
- Raises:
导入错误 - 如果未安装Pillow。
- pil_tobytes(*args, unmultiply=False, **kwargs)#
v1.17.3 中的新内容
返回图像作为指定格式的字节对象,使用Pillow。例如
stream = pix.pil_tobytes(format="WEBP", optimize=True, dpi=(150, 150))。另请参见上文。有关其他参数的详细信息,请参阅Pillow文档。- Raises:
导入错误 - 如果未安装Pillow。
- Return type:
字节
- warp(quad, width, height)#
v1.19.3中的新功能
通过“扭曲”四边形返回一个新的位图,使得四边形的角落成为新的位图的角落。目标位图的 IRect 将是
(0, 0, width, height)。- Parameters:
四边形 (四边形_类似) – 一个凸四边形,坐标位于
Pixmap.irect内部(包括边界点)。width (int) – 希望得到的宽度。
height (int) – 所需的结果高度。
- Returns:
一个新的像素图,其中四个角按顺时针方向映射到像素图的角:
quad.ul -> irect.tl,quad.ur -> irect.tr, 等等。- Return type:
-
- color_count(colors=False, clip=None)#
v1.19.2中的新功能
在 v1.19.3 中更改
确定位图的唯一颜色及其数量。
- Parameters:
颜色 (布尔值) – (在 v1.19.3 中更改) 如果
True返回一个颜色像素及其使用计数的字典,否则仅返回唯一颜色的数量。clip (rect_like) –
Pixmap.irect内部的一个矩形。如果提供,只有那些像素会被考虑。这允许直接检查给定图像的子矩形 – 而不是构建子图像。
- Return type:
字典或整数
- Returns:
可以是颜色的数量,或者是一个包含项目的字典
pixel: count。像素键是一个长度为Pixmap.n的bytes对象。注意
要恢复一个像素的 元组,使用
tuple(colors.keys()[i])来获取第 i 个项目。响应时间取决于图像的采样大小,对于非常大的图像,可能超过一秒。
在适用的情况下,具有不同 alpha 值的像素将被视为不同的颜色。
- color_topusage(clip=None)#
v1.19.3中的新功能
返回使用最频繁的颜色及其相对频率。
- Parameters:
clip (rect_like) – 在
Pixmap.irect内部的一个矩形。如果提供,则仅考虑这些像素。这允许直接检查给定pixmap的子矩形,而不是构建子pixmap。- Return type:
元组
- Returns:
一个元组
(ratio, pixel)其中0 < ratio <= 1而 pixel 是颜色的像素值。使用这个来决定图像是否“几乎”是单色:响应(0.95, b"x00x00x00")意味着95%的所有像素是黑色。这里是一个示例 如何使用Pixmaps:检查文本可见性。
- alpha#
指示图像是否包含透明信息。
- Type:
布尔值
- digest#
该位图的MD5哈希值(16字节)。这是一个用于唯一标识的技术值。
- Type:
字节
- stride#
包含在
Pixmap.samples中一行图像数据的长度。这主要用于计算目的。以下表达式为真:len(samples) == height * stridewidth * n == stride
- Type:
整型
- is_monochrome#
v1.19.2中的新功能
对于只有黑白颜色的灰度图像,这里是
True。- Type:
布尔值
- is_unicolor#
v1.19.2中的新功能
如果所有像素都是相同的(任何颜色空间),则为
True。在适用的情况下,具有不同 alpha 值的像素将被视为不同的颜色。- Type:
布尔值
- samples#
所有像素的颜色和(如果
Pixmap.alpha为真)透明度值。它是一个width * height * n字节的区域。每 n 个字节定义一个像素。每 n 个字节依次生成一个像素,按扫描线顺序排列。后续的扫描线彼此紧接着,没有填充。例如,对于 RGBA 颜色空间,这意味着 samples 是一个字节序列,如 …, R, G, B, A, …,而四个字节值 R, G, B, A 定义一个像素。这个区域可以传递给其他图形库,例如PIL(Python图像库),以进行其他处理,例如将位图保存为其他图像格式。
注意
底层数据通常是一个 大的 内存区域,从中为此属性制作一个
bytes副本……每次访问它时:例如,一个RGB渲染的字母页面的样本大小几乎为1.4 MB。因此,考虑将其分配给一个新变量,或使用memoryview版本Pixmap.samples_mv(在v1.18.17中新增)。对基础数据的任何更改只有在再次访问该属性后才能获取。这与使用 memoryview 版本不同。
- Type:
字节
- samples_mv#
v1.18.17 新特性
像
Pixmap.samples,但使用 Pythonmemoryview格式。它是指向 pixmap 中的内存 - 而不是它的副本。因此,其创建速度与 pixmap 的大小无关,并且对像素的任何更改将立即可用。像
bytearray(pix.samples_mv)或bytes(pixmap.samples_mv)是等价的,可以替代pix.samples使用。我们也有
len(pix.samples) == len(pix.samples_mv)。看看这个来自2 MB JPEG的例子:内存视图是一万倍更快:
In [3]: %timeit len(pix.samples_mv) 367 ns ± 1.75 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [4]: %timeit len(pix.samples) 3.52 ms ± 57.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
在Pixmap被销毁后,任何对memoryview的使用尝试都会导致ValueError。
- Type:
内存视图
- samples_ptr#
v1.18.17 新特性
Python 指向像素区域。这是一种特殊的整数格式,可以被支持的应用程序(如 PyQt)直接用于访问样本区域,从而极快地构建它们的图像。例如:
img = QtGui.QImage(pix.samples, pix.width, pix.height, format) # (1) img = QtGui.QImage(pix.samples_ptr, pix.width, pix.height, format) # (2)
以上两者都会导致相同的Qt图像,但(2)可以快上百倍,因为它避免了对像素区域的额外复制。
警告:在Pixmap被销毁后,Python指针将变得无效,尝试使用它可能会导致Python解释器崩溃。
- Type:
整型
- size#
包含 len(pixmap)。这通常等于 len(pix.samples) 加上一些特定于平台的值,用于定义对象的其他属性。
- Type:
整型
- width#
- w#
区域的宽度(以像素为单位)。
- Type:
整型
- height#
- h#
区域的高度(单位:像素)。
- Type:
整型
- x#
左上角的X坐标(以像素为单位)。无法直接更改 – 使用
Pixmap.set_origin()。- Type:
整型
- y#
左上角的Y坐标(以像素为单位)。无法直接更改 – 使用
Pixmap.set_origin()。- Type:
整型
- n#
每个像素的组件数。这个数字取决于色彩空间和 alpha。如果色彩空间不是 None(模板掩码),则 Pixmap.n - Pixmap.alpha == pixmap.colorspace.n 为真。如果色彩空间是 None,则 n == alpha == 1。
- Type:
整型
- xres#
水平分辨率,以每英寸的点数(dpi)表示。请参阅
resolution。不能直接更改 – 使用Pixmap.set_dpi()。- Type:
整型
- yres#
垂直分辨率,以 dpi(每英寸点数)为单位。请另见
resolution。无法直接更改 - 使用Pixmap.set_dpi()。- Type:
整型
- interpolate#
一个仅供信息使用的布尔标志,如果图像将使用“线性插值”绘制则设置为 True。如果 False 将使用“最近邻采样”。
- Type:
布尔值
支持的输入图像格式#
以下文件类型被支持作为 输入 来构造位图: BMP, JPEG, GIF, TIFF, JXR, JPX, PNG, PAM 以及所有 可移植任意映像 家族 (PBM, PGM, PNM, PPM)。此支持有两个方面:
直接通过 Pixmap(filename) 或 Pixmap(byterray) 创建一个图片映像。然后该图片映像将具有由图像确定的属性。
使用 pymupdf.open(…) 打开这些文件。结果将以包含单个页面的文档形式出现。创建此页面的pixmap提供了在此上下文中可用的所有选项:应用矩阵、选择颜色空间和透明度、将pixmap限制在剪切区域等。
SVG 图像 仅通过上述方法 2 支持,而不是直接作为位图。但请记住:结果是一个 位图图像,这在位图中始终是这样的 [1]。
支持的输出图像格式#
支持多种图像输出格式。您可以选择将图像直接写入文件(Pixmap.save()),或生成一个字节对象(Pixmap.tobytes())。这两种方法都接受一个字符串来标识所需的格式(下面的格式列)。请注意,图像的像素色彩空间、透明度支持(alpha)和图像格式并不是所有组合都可能。
格式 |
颜色空间 |
透明度 |
扩展名 |
描述 |
|---|---|---|---|---|
jpg, jpeg |
灰度,rgb,cmyk |
无 |
.jpg, .jpeg |
联合图像专家组 |
pam |
灰色, rgb, cmyk |
是 |
.pam |
可携带任意地图 |
pbm |
灰度, rgb |
无 |
.pbm |
可移植位图 |
pgm |
灰度, rgb |
否 |
.pgm |
可移植灰度图 |
png |
灰度,rgb |
是 |
.png |
可移植网络图形 |
pnm |
灰色, rgb |
否 |
.pnm |
可携带任意地图 |
每百万分之一 |
灰色,rgb |
没有 |
.ppm |
可移植的像素图 |
ps |
灰度,rgb,cmyk |
否 |
.ps |
Adobe PostScript 图像 |
psd |
灰度, rgb, cmyk |
是 |
.psd |
Adobe Photoshop 文档 |
注意
并不是所有的图像文件类型在所有操作系统平台上都受到支持(至少是常见的)。例如,PAM和可移植位图格式在Windows上比较少见甚至未知。
特别是关于CMYK颜色空间,您始终可以使用 rgb_pix = pymupdf.Pixmap(pymupdf.csRGB, cmyk_pix) 将CMYK位图转换为RGB位图,然后以所需的格式保存。
可以看出,MuPDF 的图像支持范围在输入和输出方面不同。在这两种方式都支持的图像格式中,PNG 和 JPEG 可能是最受欢迎的。
我们还建议将“ppm”格式作为输入使用到tkinter的 PhotoImage 方法中,例如: tkimg = tkinter.PhotoImage(data=pix.tobytes(“ppm”)) (参见教程)。这是 非常 快 (比PNG快60倍)。
脚注