Манипуляторы изображений
Манипулятор изображений — это displayable, который принимает изображение или манипулятор изображений и либо загружает его, либо выполняет над ним операцию. Манипуляторы изображений могут принимать в качестве входных данных только изображения или другие манипуляторы изображений.
Манипулятор изображений можно использовать везде, где можно использовать displayable, но не
наоборот. Image() — это своего рода манипулятор изображений, поэтому Image
можно использовать везде, где требуется манипулятор изображений.
Предупреждение
Использование манипуляторов изображений является
устаревшим. Ряд манипуляторов изображений, которые были документированы в
прошлом, больше не следует использовать, так как они страдают от присущих им проблем,
и в целом (за исключением im.Data()), displayable Transform()
предоставляет аналогичную функциональность, исправляя при этом эти проблемы.
- class im.AlphaMask(base, mask, **properties)
Манипулятор изображений, который принимает два манипулятора изображений, base и mask, в качестве аргументов. Он заменяет альфа-канал base красным каналом mask.
Это используется для предоставления альфа-канала изображения во втором изображении, например, один jpeg-файл для данных о цвете, а второй — для альфа-канала. В некоторых случаях два jpeg-файла могут быть меньше, чем один png-файл.
Обратите внимание, что эта функция принимает другие аргументы, чем
AlphaMask(), которая использует альфа-канал маски.Оба изображения должны иметь одинаковый размер и одинаковый коэффициент передискретизации (oversampling).
- class im.Blur(im, xrad, yrad=None, **properties)
Манипулятор изображений, который размывает манипулятор изображений im с использованием эллиптического ядра, описываемого xrad и опционально yrad.
Если yrad равен None, он примет значение xrad, что приведёт к использованию круглого ядра.
image logo blurred = im.Blur("logo.png", 1.5)
Устарело, начиная с версии 7.4.0: Используйте свойство трансформации
blur.
- class im.Crop(im, rect)
Манипулятор изображений, который вырезает rect, кортеж (x, y, ширина, высота), из im, манипулятора изображений.
image logo crop = im.Crop("logo.png", (0, 0, 100, 307))
Устарело, начиная с версии 7.4.0: Используйте свойство трансформации
crop.
- class im.Data(data: bytes, filename: str, **properties)
Этот манипулятор изображений загружает изображение из двоичных данных.
- data
Строка байтов, содержащая сжатые данные изображения в стандартном файловом формате.
- filename
"Имя файла", связанное с изображением. Используется, чтобы предоставить Ren'Py подсказку о формате data. (Фактически с диска ничего не загружается.)
- class im.FactorScale(im, width, height=None, bilinear=True, **properties)
Манипулятор изображений, который масштабирует im (второй манипулятор изображений) в width раз по ширине и в height раз по высоте. Если height опущен, он по умолчанию равен width.
Если bilinear равно true, то для масштабирования используется билинейная интерполяция. В противном случае, используется интерполяция по ближайшему соседу.
image logo doubled = im.FactorScale("logo.png", 1.5)
- class im.Flip(im, horizontal=False, vertical=False, **properties)
Манипулятор изображений, который отражает im (манипулятор изображений) по вертикали или горизонтали. vertical и horizontal контролируют направления, в которых отражается изображение.
image eileen flip = im.Flip("eileen_happy.png", vertical=True)
- im.Grayscale(im, **properties)
Манипулятор изображений, который создаёт обесцвеченную версию манипулятора изображений im.
Устарело, начиная с версии 7.4.0: Установите свойство трансформации
matrixcolorвSaturationMatrix(0).
- im.Sepia(im, **properties)
Манипулятор изображений, который создаёт версию манипулятора изображений im в тонах сепии.
Устарело, начиная с версии 7.4.0: Установите свойство трансформации
matrixcolorвSepiaMatrix().
- class im.Tile(im, size=None, **properties)
Манипулятор изображений, который заполняет (мостит) манипулятор изображений im до тех пор, пока его размер не станет size.
- size
Если не None, кортеж (ширина, высота). Если None, по умолчанию используется (
config.screen_width,config.screen_height).
Устарело, начиная с версии 7.4.0: Используйте
Tile(im, xysize=size, **properties).
im.MatrixColor
Предупреждение
Манипулятор изображений im.MatrixColor был заменён на Transform и ATL-преобразования, которые определяют свойство matrixcolor. Каждый генератор im.matrix получил новый эквивалент Matrix, который можно найти в документации по matrixcolor.
Манипулятор изображений im.MatrixColor использует матрицу для управления тем, как преобразуются цвета изображения. Используемая матрица может быть объектом im.matrix, который кодирует матрицу 5x5 в объекте, поддерживающем матричное умножение, и возвращается рядом функций. Объекты im.matrix можно перемножать друг с другом, чтобы получить второй объект, выполняющий обе операции. Например:
image city blue = im.MatrixColor(
"city.jpg",
im.matrix.desaturate() * im.matrix.tint(0.9, 0.9, 1.0))
сначала обесцвечивает изображение, а затем тонирует его синим. Когда промежуточное изображение не нужно, перемножение матриц гораздо эффективнее, как по времени, так и по используемому месту в кэше изображений, чем использование двух im.MatrixColor.
Предупреждение
Новые объекты Matrix перемножаются в порядке, обратном im.Matrixcolor.
Если X — это Matrix, соответствующий im.Matrixcolor.x, то C*B*A будет
Matrix, соответствующим im.a*im.b*im.c.
- class im.MatrixColor(im, matrix, **properties)
Оператор изображения, который использует matrix для линейного преобразования манипулятора изображения im.
Matrix должен быть списком, кортежем или
im.matrix(), содержащим 20 или 25 элементов. Если объект содержит 25 элементов, то элементы после 20-го игнорируются.Когда четыре компонента исходного цвета — это R, G, B и A (в диапазоне от 0.0 до 1.0), а четыре компонента преобразованного цвета — R', G', B' и A' (в том же диапазоне), и элементы матрицы названы следующим образом:
[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]
преобразованные цвета можно вычислить по формуле:
R' = (a * R) + (b * G) + (c * B) + (d * A) + e G' = (f * R) + (g * G) + (h * B) + (i * A) + j B' = (k * R) + (l * G) + (m * B) + (n * A) + o A' = (p * R) + (q * G) + (r * B) + (s * A) + t
Компоненты преобразованного цвета ограничиваются диапазоном [0.0, 1.0].
Устарело, начиная с версии 7.4.0: Используйте
Transform(im, matrixcolor=matrix, **properties). СмотритеTransform()иmatrixcolor.
- class im.matrix
Создаёт объект im.matrix из matrix. Объекты im.matrix поддерживают следующие операции: матричное умножение, скалярное умножение, поэлементное сложение и поэлементное вычитание. Эти операции вызываются с помощью стандартных математических операторов (*, *, + и -, соответственно). Если два объекта im.matrix перемножаются, выполняется матричное умножение, в противном случае используется скалярное умножение.
matrix — это список или кортеж из 20 или 25 элементов. Если в нём 20 элементов, он дополняется (0, 0, 0, 0, 1), чтобы получить матрицу 5x5, подходящую для умножения.
Устарело, начиная с версии 7.4.0: Используйте
Matrix.
- im.matrix.brightness(b)
Возвращает im.matrix, который изменяет яркость изображения.
- b
Величина изменения яркости изображения. Это должно быть число от -1 до 1, где -1 — самое тёмное возможное изображение, а 1 — самое яркое.
Устарело, начиная с версии 7.4.0: Используйте
BrightnessMatrix(b)со свойством трансформацииmatrixcolor.
- im.matrix.colorize(black_color, white_color)
Возвращает im.matrix, который раскрашивает черно-белое изображение. black_color и white_color — это цвета в стиле Ren'Py, поэтому их можно указывать в виде строк или кортежей значений цвета (0-255).
# Это делает чёрные цвета красными, а белые — синими. image logo colored = im.MatrixColor( "bwlogo.png", im.matrix.colorize("#f00", "#00f"))
Устарело, начиная с версии 7.4.0: Используйте
ColorizeMatrix(black_color, white_color)со свойством трансформацииmatrixcolor.
- im.matrix.contrast(c)
Возвращает im.matrix, который изменяет контрастность изображения. c должно быть больше 0.0. Значения от 0.0 до 1.0 уменьшают контрастность, а значения больше 1.0 — увеличивают.
Устарело, начиная с версии 7.4.0: Используйте
ContrastMatrix(c)со свойством трансформацииmatrixcolor.
- im.matrix.desaturate()
Возвращает im.matrix, который обесцвечивает изображение (делает его в градациях серого). Это эквивалентно вызову im.matrix.saturation(0).
Устарело, начиная с версии 7.4.0: Используйте
SaturationMatrix(0)со свойством трансформацииmatrixcolor.
- im.matrix.hue(h)
Возвращает im.matrix, который поворачивает цветовой тон на h градусов, сохраняя при этом светимость.
Устарело, начиная с версии 7.4.0: Используйте
HueMatrix(h)со свойством трансформацииmatrixcolor.
- im.matrix.identity()
Возвращает единичную матрицу, которая не изменяет цвет или альфа-канал.
Устарело, начиная с версии 7.4.0: Используйте
IdentityMatrix()со свойством трансформацииmatrixcolor.
- im.matrix.invert()
Возвращает im.matrix, который инвертирует красный, зелёный и синий каналы изображения, не изменяя альфа-канал.
Устарело, начиная с версии 7.4.0: Используйте
InvertMatrix(1.0)со свойством трансформацииmatrixcolor.
- im.matrix.opacity(o)
Возвращает im.matrix, который изменяет непрозрачность изображения. Значение o 0.0 соответствует полной прозрачности, а 1.0 — полной непрозрачности.
Устарело, начиная с версии 7.4.0: Используйте
OpacityMatrix(o)со свойством трансформацииmatrixcolor.
- im.matrix.saturation(level, desat=(0.2126, 0.7152, 0.0722))
Возвращает im.matrix, который изменяет насыщенность изображения. Альфа-канал остаётся неизменным.
- level
Уровень насыщенности результирующего изображения. 1.0 — неизменённое изображение, а 0.0 — изображение в градациях серого.
- desat
Это кортеж из 3 элементов, который управляет тем, какая часть красного, зелёного и синего каналов будет помещена во все три канала полностью обесцвеченного изображения. Значение по умолчанию основано на константах, используемых для канала яркости телевизионного сигнала NTSC. Поскольку человеческий глаз наиболее чувствителен к зелёному, сохраняется большая часть зелёного канала, чем двух других каналов.
Устарело, начиная с версии 7.4.0: Используйте
SaturationMatrix(value, desat)со свойством трансформацииmatrixcolor.
- im.matrix.tint(r, g, b)
Возвращает im.matrix, который тонирует изображение, не изменяя альфа-канал. r, g и b должны быть числами от 0 до 1 и определяют, какая доля данного канала будет перенесена в конечное изображение. (Например, если r равно 0.5, а значение красного канала — 100, то преобразованный цвет будет иметь значение красного канала, равное 50.)
Устарело, начиная с версии 7.4.0: Используйте
TintMatrix(Color((r, g, b)))со свойством трансформацииmatrixcolor.