1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
"""
Pixmap tests
* make pixmap of a page and assert bbox size
* make pixmap from a PDF xref and compare with extracted image
* pixmap from file and from binary image and compare
"""
import os
import tempfile
import fitz
scriptdir = os.path.abspath(os.path.dirname(__file__))
epub = os.path.join(scriptdir, "resources", "Bezier.epub")
pdf = os.path.join(scriptdir, "resources", "001003ED.pdf")
imgfile = os.path.join(scriptdir, "resources", "nur-ruhig.jpg")
def test_pagepixmap():
# pixmap from an EPUB page
doc = fitz.open(epub)
page = doc[0]
pix = page.get_pixmap()
assert pix.irect == page.rect.irect
pix = page.get_pixmap(alpha=True)
assert pix.alpha
assert pix.n == pix.colorspace.n + pix.alpha
def test_pdfpixmap():
# pixmap from xref in a PDF
doc = fitz.open(pdf)
# take first image item of first page
img = doc.get_page_images(0)[0]
# make pixmap of it
pix = fitz.Pixmap(doc, img[0])
# assert pixmap properties
assert pix.width == img[2]
assert pix.height == img[3]
# extract image and compare metadata
extractimg = doc.extract_image(img[0])
assert extractimg["width"] == pix.width
assert extractimg["height"] == pix.height
def test_filepixmap():
# pixmaps from file and from stream
# should lead to same result
pix1 = fitz.Pixmap(imgfile)
stream = open(imgfile, "rb").read()
pix2 = fitz.Pixmap(stream)
assert repr(pix1) == repr(pix2)
assert pix1.digest == pix2.digest
def test_pilsave():
# pixmaps from file then save to pillow image
# make pixmap from this and confirm equality
pix1 = fitz.Pixmap(imgfile)
try:
stream = pix1.pil_tobytes("JPEG")
pix2 = fitz.Pixmap(stream)
assert repr(pix1) == repr(pix2)
except:
pass
def test_save(tmpdir):
# pixmaps from file then save to image
# make pixmap from this and confirm equality
pix1 = fitz.Pixmap(imgfile)
outfile = os.path.join(tmpdir, "foo.png")
pix1.save(outfile, output="png")
# read it back
pix2 = fitz.Pixmap(outfile)
assert repr(pix1) == repr(pix2)
def test_setalpha():
# pixmap from JPEG file, then add an alpha channel
# with 30% transparency
pix1 = fitz.Pixmap(imgfile)
opa = int(255 * 0.3) # corresponding to 30% transparency
alphas = [opa] * (pix1.width * pix1.height)
alphas = bytearray(alphas)
pix2 = fitz.Pixmap(pix1, 1) # add alpha channel
pix2.set_alpha(alphas) # make image 30% transparent
samples = pix2.samples # copy of samples
# confirm correct the alpha bytes
t = bytearray([samples[i] for i in range(3, len(samples), 4)])
assert t == alphas
def test_color_count():
pm = fitz.Pixmap(imgfile)
assert pm.color_count() == 40624
def test_memoryview():
pm = fitz.Pixmap(imgfile)
samples = pm.samples_mv
assert isinstance( samples, memoryview)
print( f'samples={samples} samples.itemsize={samples.itemsize} samples.nbytes={samples.nbytes} samples.ndim={samples.ndim} samples.shape={samples.shape} samples.strides={samples.strides}')
assert samples.itemsize == 1
assert samples.nbytes == 659817
assert samples.ndim == 1
assert samples.shape == (659817,)
assert samples.strides == (1,)
def test_samples_ptr():
pm = fitz.Pixmap(imgfile)
samples = pm.samples_ptr
print( f'samples={samples}')
assert isinstance( samples, int)
|