Metadata-Version: 2.1
Name: simplejpeg
Version: 1.7.3
Summary: A simple package for fast JPEG encoding and decoding.
Author-email: Joachim Folz <joachim.folz@dfki.de>
License: MIT License
        
        Copyright (c) 2019 Joachim Folz
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
        
        From hereon included are the license texts of all bundled software.
        
        
        
        
        ================================================================================
        Content of: D:\a\simplejpeg\simplejpeg\lib\libjpeg-turbo-3.0.3\LICENSE.md
        ================================================================================
        
        
        libjpeg-turbo Licenses
        ======================
        
        libjpeg-turbo is covered by two compatible BSD-style open source licenses:
        
        - The IJG (Independent JPEG Group) License, which is listed in
          [README.ijg](README.ijg)
        
          This license applies to the libjpeg API library and associated programs,
          including any code inherited from libjpeg and any modifications to that
          code.  Note that the libjpeg-turbo SIMD source code bears the
          [zlib License](https://opensource.org/licenses/Zlib), but in the context of
          the overall libjpeg API library, the terms of the zlib License are subsumed
          by the terms of the IJG License.
        
        - The Modified (3-clause) BSD License, which is listed below
        
          This license applies to the TurboJPEG API library and associated programs, as
          well as the build system.  Note that the TurboJPEG API library wraps the
          libjpeg API library, so in the context of the overall TurboJPEG API library,
          both the terms of the IJG License and the terms of the Modified (3-clause)
          BSD License apply.
        
        
        Complying with the libjpeg-turbo Licenses
        =========================================
        
        This section provides a roll-up of the libjpeg-turbo licensing terms, to the
        best of our understanding.  This is not a license in and of itself.  It is
        intended solely for clarification.
        
        1.  If you are distributing a modified version of the libjpeg-turbo source,
            then:
        
            1.  You cannot alter or remove any existing copyright or license notices
                from the source.
        
                **Origin**
                - Clause 1 of the IJG License
                - Clause 1 of the Modified BSD License
                - Clauses 1 and 3 of the zlib License
        
            2.  You must add your own copyright notice to the header of each source
                file you modified, so others can tell that you modified that file.  (If
                there is not an existing copyright header in that file, then you can
                simply add a notice stating that you modified the file.)
        
                **Origin**
                - Clause 1 of the IJG License
                - Clause 2 of the zlib License
        
            3.  You must include the IJG README file, and you must not alter any of the
                copyright or license text in that file.
        
                **Origin**
                - Clause 1 of the IJG License
        
        2.  If you are distributing only libjpeg-turbo binaries without the source, or
            if you are distributing an application that statically links with
            libjpeg-turbo, then:
        
            1.  Your product documentation must include a message stating:
        
                This software is based in part on the work of the Independent JPEG
                Group.
        
                **Origin**
                - Clause 2 of the IJG license
        
            2.  If your binary distribution includes or uses the TurboJPEG API, then
                your product documentation must include the text of the Modified BSD
                License (see below.)
        
                **Origin**
                - Clause 2 of the Modified BSD License
        
        3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the
            contributors thereof in advertising, publicity, etc.
        
            **Origin**
            - IJG License
            - Clause 3 of the Modified BSD License
        
        4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
            free of defects, nor do we accept any liability for undesirable
            consequences resulting from your use of the software.
        
            **Origin**
            - IJG License
            - Modified BSD License
            - zlib License
        
        
        The Modified (3-clause) BSD License
        ===================================
        
        Copyright (C)2009-2023 D. R. Commander.  All Rights Reserved.<br>
        Copyright (C)2015 Viktor Szathmáry.  All Rights Reserved.
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        
        - Redistributions of source code must retain the above copyright notice,
          this list of conditions and the following disclaimer.
        - Redistributions in binary form must reproduce the above copyright notice,
          this list of conditions and the following disclaimer in the documentation
          and/or other materials provided with the distribution.
        - Neither the name of the libjpeg-turbo Project nor the names of its
          contributors may be used to endorse or promote products derived from this
          software without specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
        LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        POSSIBILITY OF SUCH DAMAGE.
        
        
        Why Two Licenses?
        =================
        
        The zlib License could have been used instead of the Modified (3-clause) BSD
        License, and since the IJG License effectively subsumes the distribution
        conditions of the zlib License, this would have effectively placed
        libjpeg-turbo binary distributions under the IJG License.  However, the IJG
        License specifically refers to the Independent JPEG Group and does not extend
        attribution and endorsement protections to other entities.  Thus, it was
        desirable to choose a license that granted us the same protections for new code
        that were granted to the IJG for code derived from their software.
        
        
        
        
        
        ================================================================================
        Content of: D:\a\simplejpeg\simplejpeg\lib\libjpeg-turbo-3.0.3\README.ijg
        ================================================================================
        
        
        libjpeg-turbo note:  This file has been modified by The libjpeg-turbo Project
        to include only information relevant to libjpeg-turbo, to wordsmith certain
        sections, and to remove impolitic language that existed in the libjpeg v8
        README.  It is included only for reference.  Please see README.md for
        information specific to libjpeg-turbo.
        
        
        The Independent JPEG Group's JPEG software
        ==========================================
        
        This distribution contains a release of the Independent JPEG Group's free JPEG
        software.  You are welcome to redistribute this software and to use it for any
        purpose, subject to the conditions under LEGAL ISSUES, below.
        
        This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,
        Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
        Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
        and other members of the Independent JPEG Group.
        
        IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
        (also known as JPEG, together with ITU-T SG16).
        
        
        DOCUMENTATION ROADMAP
        =====================
        
        This file contains the following sections:
        
        OVERVIEW            General description of JPEG and the IJG software.
        LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
        REFERENCES          Where to learn more about JPEG.
        ARCHIVE LOCATIONS   Where to find newer versions of this software.
        FILE FORMAT WARS    Software *not* to get.
        TO DO               Plans for future IJG releases.
        
        Other documentation files in the distribution are:
        
        User documentation:
          usage.txt         Usage instructions for cjpeg, djpeg, jpegtran,
                            rdjpgcom, and wrjpgcom.
          *.1               Unix-style man pages for programs (same info as usage.txt).
          wizard.txt        Advanced usage instructions for JPEG wizards only.
          change.log        Version-to-version change highlights.
        Programmer and internal documentation:
          libjpeg.txt       How to use the JPEG library in your own programs.
          example.c         Sample code for calling the JPEG library.
          structure.txt     Overview of the JPEG library's internal structure.
          coderules.txt     Coding style rules --- please read if you contribute code.
        
        Please read at least usage.txt.  Some information can also be found in the JPEG
        FAQ (Frequently Asked Questions) article.  See ARCHIVE LOCATIONS below to find
        out where to obtain the FAQ article.
        
        If you want to understand how the JPEG code works, we suggest reading one or
        more of the REFERENCES, then looking at the documentation files (in roughly
        the order listed) before diving into the code.
        
        
        OVERVIEW
        ========
        
        This package contains C software to implement JPEG image encoding, decoding,
        and transcoding.  JPEG (pronounced "jay-peg") is a standardized compression
        method for full-color and grayscale images.  JPEG's strong suit is compressing
        photographic images or other types of images that have smooth color and
        brightness transitions between neighboring pixels.  Images with sharp lines or
        other abrupt features may not compress well with JPEG, and a higher JPEG
        quality may have to be used to avoid visible compression artifacts with such
        images.
        
        JPEG is normally lossy, meaning that the output pixels are not necessarily
        identical to the input pixels.  However, on photographic content and other
        "smooth" images, very good compression ratios can be obtained with no visible
        compression artifacts, and extremely high compression ratios are possible if
        you are willing to sacrifice image quality (by reducing the "quality" setting
        in the compressor.)
        
        This software implements JPEG baseline, extended-sequential, progressive, and
        lossless compression processes.  Provision is made for supporting all variants
        of these processes, although some uncommon parameter settings aren't
        implemented yet.  We have made no provision for supporting the hierarchical
        processes defined in the standard.
        
        We provide a set of library routines for reading and writing JPEG image files,
        plus two sample applications "cjpeg" and "djpeg", which use the library to
        perform conversion between JPEG and some other popular image file formats.
        The library is intended to be reused in other applications.
        
        In order to support file conversion and viewing software, we have included
        considerable functionality beyond the bare JPEG coding/decoding capability;
        for example, the color quantization modules are not strictly part of JPEG
        decoding, but they are essential for output to colormapped file formats or
        colormapped displays.  These extra functions can be compiled out of the
        library if not required for a particular application.
        
        We have also included "jpegtran", a utility for lossless transcoding between
        different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
        applications for inserting and extracting textual comments in JFIF files.
        
        The emphasis in designing this software has been on achieving portability and
        flexibility, while also making it fast enough to be useful.  In particular,
        the software is not intended to be read as a tutorial on JPEG.  (See the
        REFERENCES section for introductory material.)  Rather, it is intended to
        be reliable, portable, industrial-strength code.  We do not claim to have
        achieved that goal in every aspect of the software, but we strive for it.
        
        We welcome the use of this software as a component of commercial products.
        No royalty is required, but we do ask for an acknowledgement in product
        documentation, as described under LEGAL ISSUES.
        
        
        LEGAL ISSUES
        ============
        
        In plain English:
        
        1. We don't promise that this software works.  (But if you find any bugs,
           please let us know!)
        2. You can use this software for whatever you want.  You don't have to pay us.
        3. You may not pretend that you wrote this software.  If you use it in a
           program, you must acknowledge somewhere in your documentation that
           you've used the IJG code.
        
        In legalese:
        
        The authors make NO WARRANTY or representation, either express or implied,
        with respect to this software, its quality, accuracy, merchantability, or
        fitness for a particular purpose.  This software is provided "AS IS", and you,
        its user, assume the entire risk as to its quality and accuracy.
        
        This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
        All Rights Reserved except as specified below.
        
        Permission is hereby granted to use, copy, modify, and distribute this
        software (or portions thereof) for any purpose, without fee, subject to these
        conditions:
        (1) If any part of the source code for this software is distributed, then this
        README file must be included, with this copyright and no-warranty notice
        unaltered; and any additions, deletions, or changes to the original files
        must be clearly indicated in accompanying documentation.
        (2) If only executable code is distributed, then the accompanying
        documentation must state that "this software is based in part on the work of
        the Independent JPEG Group".
        (3) Permission for use of this software is granted only if the user accepts
        full responsibility for any undesirable consequences; the authors accept
        NO LIABILITY for damages of any kind.
        
        These conditions apply to any software derived from or based on the IJG code,
        not just to the unmodified library.  If you use our work, you ought to
        acknowledge us.
        
        Permission is NOT granted for the use of any IJG author's name or company name
        in advertising or publicity relating to this software or products derived from
        it.  This software may be referred to only as "the Independent JPEG Group's
        software".
        
        We specifically permit and encourage the use of this software as the basis of
        commercial products, provided that all warranty or liability claims are
        assumed by the product vendor.
        
        
        REFERENCES
        ==========
        
        We recommend reading one or more of these references before trying to
        understand the innards of the JPEG software.
        
        The best short technical introduction to the JPEG compression algorithm is
                Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
                Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
        (Adjacent articles in that issue discuss MPEG motion picture compression,
        applications of JPEG, and related topics.)  If you don't have the CACM issue
        handy, a PDF file containing a revised version of Wallace's article is
        available at http://www.ijg.org/files/Wallace.JPEG.pdf.  The file (actually
        a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
        omits the sample images that appeared in CACM, but it includes corrections
        and some added material.  Note: the Wallace article is copyright ACM and IEEE,
        and it may not be used for commercial purposes.
        
        A somewhat less technical, more leisurely introduction to JPEG can be found in
        "The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
        M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
        good explanations and example C code for a multitude of compression methods
        including JPEG.  It is an excellent source if you are comfortable reading C
        code but don't know much about data compression in general.  The book's JPEG
        sample code is far from industrial-strength, but when you are ready to look
        at a full implementation, you've got one here...
        
        The best currently available description of JPEG is the textbook "JPEG Still
        Image Data Compression Standard" by William B. Pennebaker and Joan L.
        Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
        Price US$59.95, 638 pp.  The book includes the complete text of the ISO JPEG
        standards (DIS 10918-1 and draft DIS 10918-2).
        
        The original JPEG standard is divided into two parts, Part 1 being the actual
        specification, while Part 2 covers compliance testing methods.  Part 1 is
        titled "Digital Compression and Coding of Continuous-tone Still Images,
        Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
        10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
        Continuous-tone Still Images, Part 2: Compliance testing" and has document
        numbers ISO/IEC IS 10918-2, ITU-T T.83.
        
        The JPEG standard does not specify all details of an interchangeable file
        format.  For the omitted details, we follow the "JFIF" conventions, revision
        1.02.  JFIF version 1 has been adopted as ISO/IEC 10918-5 (05/2013) and
        Recommendation ITU-T T.871 (05/2011): Information technology - Digital
        compression and coding of continuous-tone still images: JPEG File Interchange
        Format (JFIF).  It is available as a free download in PDF file format from
        https://www.iso.org/standard/54989.html and http://www.itu.int/rec/T-REC-T.871.
        A PDF file of the older JFIF 1.02 specification is available at
        http://www.w3.org/Graphics/JPEG/jfif3.pdf.
        
        The TIFF 6.0 file format specification can be obtained from
        http://mirrors.ctan.org/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation
        scheme found in the TIFF 6.0 spec of 3-June-92 has a number of serious
        problems.  IJG does not recommend use of the TIFF 6.0 design (TIFF Compression
        tag 6).  Instead, we recommend the JPEG design proposed by TIFF Technical Note
        #2 (Compression tag 7).  Copies of this Note can be obtained from
        http://www.ijg.org/files/.  It is expected that the next revision
        of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
        Although IJG's own code does not support TIFF/JPEG, the free libtiff library
        uses our library to implement TIFF/JPEG per the Note.
        
        
        ARCHIVE LOCATIONS
        =================
        
        The "official" archive site for this software is www.ijg.org.
        The most recent released version can always be found there in
        directory "files".
        
        The JPEG FAQ (Frequently Asked Questions) article is a source of some
        general information about JPEG.  It is available at
        http://www.faqs.org/faqs/jpeg-faq.
        
        
        FILE FORMAT COMPATIBILITY
        =========================
        
        This software implements ITU T.81 | ISO/IEC 10918 with some extensions from
        ITU T.871 | ISO/IEC 10918-5 (JPEG File Interchange Format-- see REFERENCES).
        Informally, the term "JPEG image" or "JPEG file" most often refers to JFIF or
        a subset thereof, but there are other formats containing the name "JPEG" that
        are incompatible with the original JPEG standard or with JFIF (for instance,
        JPEG 2000 and JPEG XR).  This software therefore does not support these
        formats.  Indeed, one of the original reasons for developing this free software
        was to help force convergence on a common, interoperable format standard for
        JPEG files.
        
        JFIF is a minimal or "low end" representation.  TIFF/JPEG (TIFF revision 6.0 as
        modified by TIFF Technical Note #2) can be used for "high end" applications
        that need to record a lot of additional data about an image.
        
        
        TO DO
        =====
        
        Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.
        
Project-URL: Documentation, https://gitlab.com/jfolz/simplejpeg/blob/master/README.rst
Project-URL: Source, https://gitlab.com/jfolz/simplejpeg
Project-URL: Tracker, https://gitlab.com/jfolz/simplejpeg/issues
Keywords: the,fastest,JPEG,encoding,decoding,package,in,town
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: numpy <2


This project is in no way affiliated with the
`libjpeg-turbo <https://github.com/libjpeg-turbo/libjpeg-turbo>`_
project.



simplejpeg
==========

simplejpeg is a simple package based on recent versions
of libturbojpeg for fast JPEG encoding and decoding.



Why another library?
--------------------

Pillow and OpenCV are excellent options for handling JPEG
images and a variety of other formats.

If all you want is to read or write a couple of images and
don't worry about the details, this package is not for you.

Keep reading if you care about speed and want more control
over how your JPEGs are handled.

These are the reasons why I started making this:

#. Pillow is **very** slow compared to OpenCV.
#. Pillow only accepts streams as input. Images in memory
   have to be wrapped in ``BytesIO`` or similar.
   This adds to the slowness.
#. OpenCV is gigantic,
   only accepts Numpy arrays as input,
   and returns images as BGR instead of RGB.
#. Recent versions of libturbojpeg offer impressive speed
   gains on modern processors.
   Linux distributions and libraries tend to ship very old
   versions.


This library is especially for you if you need:

#. Speed.
#. Read and write directly from/to memory.
#. Advanced features of the underlying library.



Installation
------------

- On Linux (x86/x64), Windows (x86/x64), or MacOS (10.9+, x64)
  you can simply ``pip install simplejpeg``.
  Update ``pip`` if it wants to build from source anyway.
- On other platforms you can try to install from source.
  Make sure your system is setup to build CPython extensions
  and install ``cmake >= 2.8.12``.
  Then run ``pip install simplejpeg`` to install from source.
- You can also run ``python setup.py bdist_wheel`` etc. as usual.



Usage
-----

This library provides four functions:

``decode_jpeg_header``, ``decode_jpeg``, ``encode_jpeg``, ``is_jpeg``.

Uncompressed image data is stored as numpy arrays.
Decoding functions can accept any Python object that supports the
`buffer protocol <https://docs.python.org/3/c-api/buffer.html>`_,
like ``array``, ``bytes``, ``bytearray``, ``memoryview``, etc.



decode_jpeg_header
~~~~~~~~~~~~~~~~~~

::

    decode_jpeg_header(
        data: Any,
        min_height: SupportsInt=0,
        min_width: SupportsInt=0,
        min_factor: SupportsFloat=1,
        strict: bool=True,
    ) -> (SupportsInt, SupportsInt, Text, Text)


Decode only the header of a JPEG image given as JPEG (JFIF) data from memory.
Accepts any input that supports the
`buffer protocol <https://docs.python.org/3/c-api/buffer.html>`_.
This is very fast on the order of 100000+ images per second.
Returns height and width in pixels of the image when decoded,
and colorspace and subsampling as string.

- data:
  JPEG data in memory; must support buffer interface
  (e.g., ``bytes``, ``memoryview``)
- min_height:
  minimum height in pixels of the decoded image;
  values <= 0 are ignored
- min_width:
  minimum width in pixels of the decoded image;
  values <= 0 are ignored
- min_factor:
  minimum downsampling factor when decoding to smaller size;
  factors smaller than 2 may take longer to decode
- strict:
  if True, raise ValueError for recoverable errors;
  default True
- returns: ``(height: int, width: int, colorspace: str, color subsampling: str)``



decode_jpeg
~~~~~~~~~~~

::

    def decode_jpeg(
        data: SupportsBuffer,
        colorspace: Text='RGB',
        fastdct: Any=False,
        fastupsample: Any=False,
        min_height: SupportsInt=0,
        min_width: SupportsInt=0,
        min_factor: SupportsFloat=1,
        buffer: SupportsBuffer=None,
        strict: bool=True,
    ) -> np.ndarray

Decode a JPEG image given as JPEG (JFIF) data from memory.
Accepts any input that supports the
`buffer protocol <https://docs.python.org/3/c-api/buffer.html>`_.
Returns the image as numpy array in the requested colorspace.

- data:
  JPEG data in memory; must support buffer interface
  (e.g., ``bytes``, ``memoryview``)
- colorspace:
  target colorspace, any of the following:
  'RGB', 'BGR', 'RGBX', 'BGRX', 'XBGR', 'XRGB',
  'GRAY', 'RGBA', 'BGRA', 'ABGR', 'ARGB';
  'CMYK' may only be used for images already in CMYK space
- fastdct:
  if True, use fastest DCT method;
  speeds up decoding by 4-5% for a minor loss in quality
- fastupsample:
  if True, use fastest color upsampling method;
  speeds up decoding by 4-5% for a minor loss in quality
- min_height:
  minimum height in pixels of the decoded image;
  values <= 0 are ignored
- param min_width:
  minimum width in pixels of the decoded image;
  values <= 0 are ignored
- param min_factor:
  minimum downsampling factor when decoding to smaller size;
  factors smaller than 2 may take longer to decode
- buffer:
  use given object as output buffer;
  must support the buffer protocol and be writable, e.g.,
  numpy ndarray or bytearray;
  use decode_jpeg_header to find out required minimum size
- strict:
  if True, raise ValueError for recoverable errors;
  default True
- returns: image as ``numpy.ndarray``



encode_jpeg
~~~~~~~~~~~

::

    def encode_jpeg(
            image: numpy.ndarray,
            quality: SupportsInt=85,
            colorspace: Text='RGB',
            colorsubsampling: Text='444',
            fastdct: Any=True,
    ) -> bytes

Encode an image given as numpy array to JPEG (JFIF) string.
Returns JPEG (JFIF) data.

- image:
  uncompressed image as uint8 array
- quality:
  JPEG quantization factor;
  0\-100, higher equals better quality
- colorspace:
  source colorspace; one of
  'RGB', 'BGR', 'RGBX', 'BGRX', 'XBGR', 'XRGB',
  'GRAY', 'RGBA', 'BGRA', 'ABGR', 'ARGB', 'CMYK'
- colorsubsampling:
  subsampling factor for color channels; one of
  '444', '422', '420', '440', '411', 'Gray'.
- fastdct:
  If True, use fastest DCT method;
  usually no observable difference
- returns: ``bytes`` object of encoded image as JPEG (JFIF) data



is_jpeg
~~~~~~~

::

    def is_jpeg(data: SupportsBytes)


Check whether a bytes object (or similar) contains JPEG (JFIF) data.

- data: JPEG (JFIF) data
- returns: True if JPEG
