Matrix (マトリックス)#

マトリックスは、MuPDFでの画像変換に使用される行優先の3x3マトリックスです(これは Adobe PDFリファレンス に規定されている対応するコンセプトに従っています)。マトリックスを使用することで、ページの描画画像をさまざまな方法で操作できます。ページの一部またはすべてを回転、拡大縮小、反転、せん断、シフトなどに設定することができます。これらの操作には、たった6つの浮動小数点数値のいくつかまたはすべてを設定します。

すべてのポイントまたはピクセルは2次元の空間に存在するため、そのマトリックスの1つの列ベクトルは定数ユニットベクトルであり、操作に使用されるのは残りの6つの要素のみです。これらの6つの要素は通常、 [a、b、c、d、e、f] で表されます。以下は、それらがマトリックス内でどのように配置されているかです。

_images/img-matrix.png

注意点:

  • 以下のメソッドは便宜的な機能であり、行うすべてのことは、6つの数値の値を直接操作しても実現できます。

  • すべての操作を組み合わせることができます。1回の操作で回転、せん断、スケール、シフトなどを同時に実行するマトリックスを構築できます。ただし、これを行う場合は、後での 注釈 または Adobe PDFリファレンス を参照してください。

メソッド/属性

説明

Matrix.prerotate()

回転を実行

Matrix.prescale()

スケーリングを実行

Matrix.preshear()

せん断(歪み)を実行

Matrix.pretranslate()

移動(シフト)を実行

Matrix.concat()

マトリックスの乗算を実行

Matrix.invert()

反転されたマトリックスを計算

Matrix.norm()

ユークリッドノルム

Matrix.a

ズームファクターX方向

Matrix.b

せん断効果Y方向

Matrix.c

せん断効果X方向

Matrix.d

ズームファクターY方向

Matrix.e

水平シフト

Matrix.f

垂直シフト

Matrix.is_rectilinear

角の位置が直線のままの場合は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" の場合、別の行列の 新しいコピー が作成されます。

浮動小数点値 "degree" は、反時計回りに回転する行列を作成することを指定します。

"sequence" は、正確に 6 つの浮動小数点エントリを持つ任意の Python シーケンスオブジェクトである必要があります(PythonシーケンスをPyMuPDFで引数として使用する場合)。

pymupdf.Matrix(1, 1) and pymupdf.Matrix(pymupdf.Identity) create modifiable versions of the Identity (アイデンティティ) matrix, which looks like [1, 0, 0, 1, 0, 0].

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) -- 度単位での回転角度(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 軸に沿ったシフト / 移動操作を実行するために行列を修正します。属性 ef にのみ影響を与えます: [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 のいずれかが現在の行列である場合があります。行列の乗算は可換ではないことに注意してください。したがって、m1m2 の順序が重要です。

パラメータ:
invert(m=None)#

行列 m の逆行列を計算し、その結果を現在の行列に格納します。m が逆行列を持たない場合("degenerate")は 1 を返します。この場合、現在の行列は 変更されません 。m が逆行列を持つ場合は 0 を返し、現在の行列は m の逆行列で置き換えられます。

パラメータ:

m (Matrix (マトリックス)) -- 逆行列を計算する行列。提供されない場合、現在の行列が使用されます。

戻り値の型:

int

a#

X方向 (幅) のスケーリング。たとえば、0.5の値は を2倍に縮小します。a < 0の場合、左右反転が追加で発生します。

Type:

float

b#

シアリング効果を引き起こします:各 Point(x, y)Point(x、y - b * x) になります。したがって、水平線は「傾斜」します。

Type:

float

c#

シアリング効果を引き起こします:各 Point(x, y)Point(x - c * y、y) になります。したがって、垂直線は「傾斜」します。

Type:

float

d#

Y方向 (高さ) でのスケーリング。たとえば、1.5の値は 高さ を50%伸ばします。d < 0の場合、上下反転が追加で発生します。

Type:

float

e#

水平シフト効果を引き起こします:各 Point(x, y)Point(x + e、y) になります。eの正の(負の)値は右に(左に)シフトします。

Type:

float

f#

垂直シフト効果を引き起こします:各 Point(x, y)Point(x、y - f) になります。f の正の(負の)値は下に(上に)シフトします。

Type:

float

is_rectilinear#

矩形の意味は、シアリングが存在せず、回転が90度の整数倍であることを示します。通常、これは変換前の(軸に沿った)矩形が変換後も軸に沿った矩形であることを確認するために使用されます。

Type:

bool

注釈

  • このクラスはPythonのシーケンスプロトコルに従っているため、コンポーネントにはインデックスを使用できます。また、PythonシーケンスをPyMuPDFで引数として使用する場合 を参照してください。

  • 行列は、通常の数値のようにほとんどの算術演算子を使用して操作できます。行列は加算、減算、乗算、または除算できます。ジオメトリオブジェクトの 幾何学オブジェクトのためのオペレーター代数

  • 行列の乗算は 可換ではありません。乗算要因のシーケンスを変更すると、一般に結果が変わります。そのため、変換がどの結果を生じるかがすぐに不明確になることがあります。

#

以下は、いくつかの可能な効果を示す例です。すべての図は、固定された参照点(赤いドット)に対するある行列の制御下で挿入されたテキストを示しています。

  1. Identity (アイデンティティ) 行列は操作を行いません。

_images/img-matrix-0.png
  1. スケーリング行列 Matrix(2, 0.5) は、水平方向に2倍の拡大を行い、垂直方向には0.5倍の縮小を行います。

_images/img-matrix-1.png
  1. 属性 Matrix.e および Matrix.f は、それぞれ水平方向および垂直方向にシフトします。以下の場合、右に10、下に20シフトします。

_images/img-matrix-2.png
  1. 負の Matrix.a は左右反転を引き起こします。

_images/img-matrix-3.png
  1. 負の Matrix.d は上下反転を引き起こします。

_images/img-matrix-4.png
  1. 属性 M Matrix.b はx軸に沿って上向き/下向きに傾きます。

_images/img-matrix-5.png
  1. 属性 Matrix.c はy軸に沿って左に傾く/右に傾きます。

_images/img-matrix-6.png
  1. Matrix Matrix(beta) は、正の角度 beta の反時計回りの回転を実行します。

_images/img-matrix-7.png

This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.

Discord logo