Matrix¶
Matrix는 MuPDF의 이미지 변환에 사용되는 행 우선 3x3 행렬입니다(Adobe PDF 참조 에 명시된 해당 개념을 준수). 행렬을 사용하면 페이지의 렌더링된 이미지를 다양한 방식으로 조작할 수 있습니다: 단 6개의 float 값 중 일부 또는 전체를 설정하여 페이지(의 일부)를 회전, 확대/축소, 뒤집기, 기울이기 및 이동할 수 있습니다.
모든 점 또는 픽셀이 2차원 공간에 있으므로 해당 행렬의 한 열 벡터는 상수 단위 벡터이며, 나머지 6개 요소만 조작에 사용됩니다. 이 6개 요소는 일반적으로 [a, b, c, d, e, f] 로 표시됩니다. 행렬에서의 위치는 다음과 같습니다:
참고:
아래 메서드는 편의 함수일 뿐입니다 – 수행하는 모든 작업은 6개의 숫자 값을 직접 조작하여도 달성할 수 있습니다
모든 조작을 결합할 수 있습니다 – 한 번에 회전 및 기울이기 및 확대/축소 및 이동 등을 수행하는 행렬을 구성할 수 있습니다. 하지만 이렇게 하려면 아래의 참고 사항 또는 Adobe PDF 참조 을 참조하세요.
메서드 / 속성 |
설명 |
|---|---|
회전 수행 |
|
확대/축소 수행 |
|
기울이기(왜곡) 수행 |
|
이동(시프트) 수행 |
|
행렬 곱셈 수행 |
|
역행렬 계산 |
|
유클리드 노름 |
|
X 방향 확대/축소 계수 |
|
Y 방향 기울이기 효과 |
|
X 방향 기울이기 효과 |
|
Y 방향 확대/축소 계수 |
|
수평 이동 |
|
수직 이동 |
|
사각형 모서리가 사각형 모서리로 유지되면 true |
클래스 API
- class Matrix¶
- __init__(self)¶
- __init__(self, zoom-x, zoom-y)¶
- __init__(self, shear-x, shear-y, 1)¶
- __init__(self, a, b, c, d, e, f)¶
- __init__(self, matrix)¶
- __init__(self, degree)¶
- __init__(self, sequence)¶
오버로드된 생성자.
매개변수 없이 영 행렬 Matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 이 생성됩니다.
zoom-* 및 shear-* 는 확대/축소 또는 기울이기 값(float)을 지정하고 각각 확대/축소 또는 기울이기 행렬을 생성합니다.
“matrix”의 경우 다른 행렬의 새 복사본 이 만들어집니다.
Float 값 “degree”는 반시계 방향으로 회전하는 회전 행렬의 생성을 지정합니다.
“sequence”는 정확히 6개의 float 항목을 가진 모든 Python 시퀀스 객체여야 합니다( 에서 Python 시퀀스를 인수로 사용하기 참조).
pymupdf.Matrix(1, 1) 및 pymupdf.Matrix(pymupdf.Identity) 는 [1, 0, 0, 1, 0, 0] 처럼 보이는 Identity 행렬의 수정 가능한 버전을 생성합니다.
- norm()¶
버전 1.16.0에서 새로 추가됨
행렬의 유클리드 노름을 벡터로 반환합니다.
- prerotate(deg)¶
행렬을 수정하여 양수 deg 도에 대해 반시계 방향 회전을 수행하고, 그렇지 않으면 시계 방향으로 회전합니다. 항등 행렬의 행렬 요소는 다음과 같이 변경됩니다:
[1, 0, 0, 1, 0, 0] -> [cos(deg), sin(deg), -sin(deg), cos(deg), 0, 0].
- 매개변수:
deg (float) – 도 단위의 회전 각도(Pi = 180도를 기준으로 한 일반 표기법 사용).
- prescale(sx, sy)¶
행렬을 수정하여 확대/축소 계수 sx 및 sy로 스케일링합니다. 속성 a 부터 d 에만 영향을 줍니다: [a, b, c, d, e, f] -> [a*sx, b*sx, c*sy, d*sy, e, f].
- 매개변수:
sx (float) – X 방향의 확대/축소 계수. 효과는 속성 a 의 설명을 참조하세요.
sy (float) – Y 방향의 확대/축소 계수. 효과는 속성 d 의 설명을 참조하세요.
- preshear(sx, sy)¶
행렬을 수정하여 기울이기를 수행합니다. 즉, 사각형을 평행사변형(마름모)으로 변환합니다. 속성 a 부터 d 에만 영향을 줍니다: [a, b, c, d, e, f] -> [c*sy, d*sy, a*sx, b*sx, e, f].
- 매개변수:
sx (float) – X 방향의 기울이기 효과. 속성 c 를 참조하세요.
sy (float) – Y 방향의 기울이기 효과. 속성 b 를 참조하세요.
- pretranslate(tx, ty)¶
행렬을 수정하여 x 및/또는 y 축을 따라 이동/변환 작업을 수행합니다. 속성 e 및 f 에만 영향을 줍니다: [a, b, c, d, e, f] -> [a, b, c, d, tx*a + ty*c, tx*b + ty*d].
- 매개변수:
tx (float) – X 방향의 이동 효과. 속성 e 를 참조하세요.
ty (float) – Y 방향의 이동 효과. 속성 f 를 참조하세요.
- concat(m1, m2)¶
행렬 곱 m1 * m2 를 계산하고 결과를 현재 행렬에 저장합니다. m1 또는 m2 중 하나가 현재 행렬일 수 있습니다. 행렬 곱셈은 가환적이지 않습니다. 따라서 m1, m2 의 순서가 중요합니다.
- invert(m=None)¶
m 의 역행렬을 계산하고 결과를 현재 행렬에 저장합니다. m 이 역행렬이 없으면(“degenerate”) 1 을 반환합니다. 이 경우 현재 행렬은 변경되지 않습니다. m 이 역행렬이 있으면 0 을 반환하고 현재 행렬은 역행렬 m 으로 대체됩니다.
- 매개변수:
m (Matrix) – 역행렬을 계산할 행렬. 제공되지 않으면 현재 행렬이 사용됩니다.
- 반환 형식:
int
- a¶
X 방향 (너비) 스케일링. 예를 들어, 0.5 값은 너비 를 2배로 축소합니다. a < 0이면 좌우 뒤집기가 (추가로) 발생합니다.
- 유형:
float
- b¶
기울이기 효과를 발생시킵니다: 각
Point(x, y)는Point(x, y - b*x)가 됩니다. 따라서 수평선이 “기울어집니다”.- 유형:
float
- c¶
기울이기 효과를 발생시킵니다: 각
Point(x, y)는Point(x - c*y, y)가 됩니다. 따라서 수직선이 “기울어집니다”.- 유형:
float
- d¶
Y 방향 (높이) 스케일링. 예를 들어, 1.5 값은 높이 를 50% 늘립니다. d < 0이면 상하 뒤집기가 (추가로) 발생합니다.
- 유형:
float
- e¶
수평 이동 효과를 발생시킵니다: 각 Point(x, y) 는 Point(x + e, y) 가 됩니다. e 의 양수(음수) 값은 오른쪽(왼쪽)으로 이동합니다.
- 유형:
float
- f¶
수직 이동 효과를 발생시킵니다: 각 Point(x, y) 는 Point(x, y - f) 가 됩니다. f 의 양수(음수) 값은 아래(위)로 이동합니다.
- 유형:
float
- is_rectilinear¶
직선형은 기울이기가 없고 모든 회전이 90도의 정수 배수임을 의미합니다. 일반적으로 이것은 변환 전의 (축 정렬) 사각형이 변환 후에도 여전히 축 정렬 사각형임을 확인하는 데 사용됩니다.
- 유형:
bool
참고
이 클래스는 Python 시퀀스 프로토콜을 따르므로 구성 요소는 인덱스를 통해 액세스할 수도 있습니다. 에서 Python 시퀀스를 인수로 사용하기 도 참조하세요.
행렬은 일반 숫자처럼 산술 연산자와 함께 사용할 수 있습니다: 더하기, 빼기, 곱하기 또는 나누기를 할 수 있습니다 – 기하 객체를 위한 연산자 대수 장을 참조하세요.
행렬 곱셈은 가환적이지 않습니다 – 곱하는 순서를 변경하면 일반적으로 결과가 변경됩니다. 따라서 변환이 어떤 결과를 산출할지 빠르게 불명확해질 수 있습니다.
예제¶
달성 가능한 효과 중 일부를 보여주는 예제입니다. 모든 그림은 일부 행렬의 제어 하에 삽입되고 고정된 참조점(빨간 점)을 기준으로 하는 일부 텍스트를 보여줍니다.
Identity 행렬은 작업을 수행하지 않습니다.
스케일링 행렬
Matrix(2, 0.5)는 수평으로 2배 늘리고 수직으로 0.5배 축소합니다.
음수
Matrix.a는 좌우 뒤집기를 발생시킵니다.
음수
Matrix.d는 상하 뒤집기를 발생시킵니다.
속성
Matrix.b는 x축을 따라 위/아래로 기울어집니다.
속성
Matrix.c는 y축을 따라 왼쪽/오른쪽으로 기울어집니다.
행렬
Matrix(beta)는 양수 각도beta에 대해 반시계 방향 회전을 수행합니다.
사각형에 대한 일부 효과 표시:
import pymupdf # just definitions and a temp PDF RED = (1, 0, 0) BLUE = (0, 0, 1) GREEN = (0, 1, 0) doc = pymupdf.open() page = doc.new_page() # rectangle r1 = pymupdf.Rect(100, 100, 200, 200) # scales down by 50% in x- and up by 50% in y-direction mat1 = pymupdf.Matrix(0.5, 1.5) # shifts by 50 in both directions mat2 = pymupdf.Matrix(1, 0, 0, 1, 50, 50) # draw corresponding rectangles page.draw_rect(r1, color=RED) # original page.draw_rect(r1 * mat1, color=GREEN) # scaled page.draw_rect(r1 * mat2, color=BLUE) # shifted doc.ez_save("matrix-effects.pdf")
