Source code for plotpy.mathutils.scaler

# -*- coding: utf-8 -*-
#
# Licensed under the terms of the BSD 3-Clause
# (see plotpy/LICENSE for details)

# pylint: disable=C0103

"""
Scaling functions
-----------------

Overview
^^^^^^^^

The :py:mod:`.scaler` module provides scaling functions for images, thanks to
the C++ scaler engine (`_scaler` extension).

The following functions are available:

* :py:func:`.resize`: resize an image using the scaler engine

Reference
^^^^^^^^^

.. autofunction:: resize
"""

# TODO: Move all _scaler imports in this module and do something to avoid
# the need to import INTERP_LINEAR, INTERP_AA, ... in all modules using the
# scaler (code refactoring between pyplot.imshow,
# styles.BaseImageParam.update_item)

# TODO: Other functions like resize could be written in the future

import numpy as np

from plotpy._scaler import INTERP_AA, INTERP_LINEAR, INTERP_NEAREST, _scale_rect


[docs] def resize(data, shape, interpolation=None): """Resize array *data* to *shape* (tuple) interpolation: 'nearest', 'linear' (default), 'antialiasing'""" interpolate = (INTERP_NEAREST,) if interpolation is not None: interp_dict = { "nearest": INTERP_NEAREST, "linear": INTERP_LINEAR, "antialiasing": INTERP_AA, } assert interpolation in interp_dict, "invalid interpolation option" interp_mode = interp_dict[interpolation] if interp_mode in (INTERP_NEAREST, INTERP_LINEAR): interpolate = (interp_mode,) if interp_mode == INTERP_AA: aa = np.ones((5, 5), data.dtype) interpolate = (interp_mode, aa) out = np.empty(shape) src_rect = (0, 0, data.shape[1], data.shape[0]) dst_rect = (0, 0, out.shape[1], out.shape[0]) _scale_rect(data, src_rect, out, dst_rect, (1.0, 0.0, None), interpolate) return out