{ "info": { "author": "Lilo Huang", "author_email": "kuso.cc@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# PyTurboJPEG\nA Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.\n\n## Prerequisites\n- [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo/releases)\n- [numpy](https://github.com/numpy/numpy)\n\n## Example\n\n```python\nimport cv2\nfrom turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT\n\n# specifying library path explicitly\n# jpeg = TurboJPEG(r'D:\\turbojpeg.dll')\n# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')\n# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')\n\n# using default library installation\njpeg = TurboJPEG()\n\n# decoding input.jpg to BGR array\nin_file = open('input.jpg', 'rb')\nbgr_array = jpeg.decode(in_file.read())\nin_file.close()\ncv2.imshow('bgr_array', bgr_array)\ncv2.waitKey(0)\n\n# decoding input.jpg to BGR array with fast upsample and fast DCT. (i.e. fastest speed but lower accuracy)\nin_file = open('input.jpg', 'rb')\nbgr_array = jpeg.decode(in_file.read(), flags=TJFLAG_FASTUPSAMPLE|TJFLAG_FASTDCT)\nin_file.close()\ncv2.imshow('bgr_array', bgr_array)\ncv2.waitKey(0)\n\n# direct rescaling 1/2 while decoding input.jpg to BGR array\nin_file = open('input.jpg', 'rb')\nbgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))\nin_file.close()\ncv2.imshow('bgr_array_half', bgr_array_half)\ncv2.waitKey(0)\n\n# getting possible scaling factors for direct rescaling\nscaling_factors = jpeg.scaling_factors\n\n# decoding JPEG image properties\nin_file = open('input.jpg', 'rb')\nwidth, height, jpeg_subsample, jpeg_colorspace = jpeg.decode_header(in_file.read())\nin_file.close()\n\n# decoding input.jpg to YUV array\nin_file = open('input.jpg', 'rb')\nbuffer_array, plane_sizes = jpeg.decode_to_yuv(in_file.read())\nin_file.close()\n\n# decoding input.jpg to YUV planes\nin_file = open('input.jpg', 'rb')\nplanes = jpeg.decode_to_yuv_planes(in_file.read())\nin_file.close()\n\n# encoding BGR array to output.jpg with default settings.\nout_file = open('output.jpg', 'wb')\nout_file.write(jpeg.encode(bgr_array))\nout_file.close()\n\n# encoding BGR array to output.jpg with TJSAMP_GRAY subsample.\nout_file = open('output_gray.jpg', 'wb')\nout_file.write(jpeg.encode(bgr_array, jpeg_subsample=TJSAMP_GRAY))\nout_file.close()\n\n# encoding BGR array to output.jpg with quality level 50. \nout_file = open('output_quality_50.jpg', 'wb')\nout_file.write(jpeg.encode(bgr_array, quality=50))\nout_file.close()\n\n# encoding BGR array to output.jpg with quality level 100 and progressive entropy coding.\nout_file = open('output_quality_100_progressive.jpg', 'wb')\nout_file.write(jpeg.encode(bgr_array, quality=100, flags=TJFLAG_PROGRESSIVE))\nout_file.close()\n\n# decoding input.jpg to grayscale array\nin_file = open('input.jpg', 'rb')\ngray_array = jpeg.decode(in_file.read(), pixel_format=TJPF_GRAY)\nin_file.close()\ncv2.imshow('gray_array', gray_array)\ncv2.waitKey(0)\n\n# scale with quality but leaves out the color conversion step\nin_file = open('input.jpg', 'rb')\nout_file = open('scaled_output.jpg', 'wb')\nout_file.write(jpeg.scale_with_quality(in_file.read(), scaling_factor=(1, 4), quality=70))\nout_file.close()\nin_file.close()\n\n# lossless crop image\nout_file = open('lossless_cropped_output.jpg', 'wb')\nout_file.write(jpeg.crop(open('input.jpg', 'rb').read(), 8, 8, 320, 240))\nout_file.close()\n```\n\n```python\n# using PyTurboJPEG with ExifRead to transpose an image if the image has an EXIF Orientation tag.\n#\n# pip install PyTurboJPEG -U\n# pip install exifread -U\n\nimport cv2\nimport numpy as np\nimport exifread\nfrom turbojpeg import TurboJPEG\n\ndef transposeImage(image, orientation):\n \"\"\"See Orientation in https://www.exif.org/Exif2-2.PDF for details.\"\"\"\n if orientation == None: return image\n val = orientation.values[0]\n if val == 1: return image\n elif val == 2: return np.fliplr(image)\n elif val == 3: return np.rot90(image, 2)\n elif val == 4: return np.flipud(image)\n elif val == 5: return np.rot90(np.flipud(image), -1)\n elif val == 6: return np.rot90(image, -1)\n elif val == 7: return np.rot90(np.flipud(image))\n elif val == 8: return np.rot90(image)\n\n# using default library installation\nturbo_jpeg = TurboJPEG()\n# open jpeg file\nin_file = open('foobar.jpg', 'rb')\n# parse orientation\norientation = exifread.process_file(in_file).get('Image Orientation', None)\n# seek file position back to 0 before decoding JPEG image\nin_file.seek(0)\n# start to decode the JPEG file\nimage = turbo_jpeg.decode(in_file.read())\n# transpose image based on EXIF Orientation tag\ntransposed_image = transposeImage(image, orientation)\n# close the file since it's no longer needed.\nin_file.close()\n\ncv2.imshow('transposed_image', transposed_image)\ncv2.waitKey(0)\n```\n\n## Installation\n\n### macOS\n- brew install jpeg-turbo\n- pip install -U git+git://github.com/lilohuang/PyTurboJPEG.git\n\n### Windows \n- Download [libjpeg-turbo official installer](https://sourceforge.net/projects/libjpeg-turbo/files) \n- pip install -U git+git://github.com/lilohuang/PyTurboJPEG.git\n\n### Linux\n- RHEL/CentOS/Fedora\n - Download [libjpeg-turbo.repo](https://libjpeg-turbo.org/pmwiki/uploads/Downloads/libjpeg-turbo.repo) to /etc/yum.repos.d/\n - sudo yum install libjpeg-turbo-official\n - pip install -U git+git://github.com/lilohuang/PyTurboJPEG.git\n\n- Ubuntu\n - sudo apt-get update\n - sudo apt-get install libturbojpeg\n - pip install -U git+git://github.com/lilohuang/PyTurboJPEG.git\n\n## Benchmark \n\n### macOS\n- macOS Sierra 10.12.6\n- Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz\n- opencv-python 3.4.0.12 (pre-built)\n- turbo-jpeg 1.5.3 (pre-built)\n\n| Function | Wall-clock time |\n| ----------------------|-----------------|\n| cv2.imdecode() \u00a0 \u00a0 \u00a0 | 0.528 sec \u00a0 |\n| TurboJPEG.decode() | 0.191 sec |\n| cv2.imencode() \u00a0 \u00a0 \u00a0 | 0.875 sec \u00a0 |\n| TurboJPEG.encode() | 0.176 sec |\n\n### Windows \n- Windows 7 Ultimate 64-bit\n- Intel(R) Xeon(R) E3-1276 v3 CPU @ 3.60 GHz\n- opencv-python 3.4.0.12 (pre-built)\n- turbo-jpeg 1.5.3 (pre-built)\n\n| Function | Wall-clock time |\n| ----------------------|-----------------|\n| cv2.imdecode() \u00a0 \u00a0 \u00a0 | 0.358 sec \u00a0 |\n| TurboJPEG.decode() | 0.135 sec |\n| cv2.imencode() \u00a0 \u00a0 \u00a0 | 0.581 sec \u00a0 |\n| TurboJPEG.encode() | 0.140 sec |\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lilohuang/PyTurboJPEG", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "PyTurboJPEG", "package_url": "https://pypi.org/project/PyTurboJPEG/", "platform": "", "project_url": "https://pypi.org/project/PyTurboJPEG/", "project_urls": { "Homepage": "https://github.com/lilohuang/PyTurboJPEG" }, "release_url": "https://pypi.org/project/PyTurboJPEG/1.6.6/", "requires_dist": null, "requires_python": "", "summary": "A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.", "version": "1.6.6", "yanked": false, "yanked_reason": null }, "last_serial": 13092924, "releases": { "1.1.5": [ { "comment_text": "", "digests": { "md5": "bdd17f5d66979892420479f779f90c35", "sha256": "f7661878dcca56470b3ff3b961e4d9fef16c99a1d1fa73633b3760c42b5420ae" }, "downloads": -1, "filename": "PyTurboJPEG-1.1.5.tar.gz", "has_sig": false, "md5_digest": "bdd17f5d66979892420479f779f90c35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4793, "upload_time": "2019-04-29T09:42:11", "upload_time_iso_8601": "2019-04-29T09:42:11.806611Z", "url": "https://files.pythonhosted.org/packages/e0/c3/910cc3093c7a7b793eddce268a0fa16aea3e0fdfacab2f71a4a48777f1a0/PyTurboJPEG-1.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "aecd5cad9c033e564dfa782f14c5794c", "sha256": "1d161eb29a6120d84cbadfb05654ac36da030f5bb5993e68abe9478183c69224" }, "downloads": -1, "filename": "PyTurboJPEG-1.2.0.tar.gz", "has_sig": false, "md5_digest": "aecd5cad9c033e564dfa782f14c5794c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5283, "upload_time": "2019-07-06T08:26:03", "upload_time_iso_8601": "2019-07-06T08:26:03.604989Z", "url": "https://files.pythonhosted.org/packages/be/8e/69ec3046d300bb449ac395a4d97bfad94e8e9519622df63454f1cf9bc94c/PyTurboJPEG-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "c8b47896425a09d596da5b4f137c533b", "sha256": "19b10798475b5570fd9a66dca64fb0c36ab11965787dc0411d7535ae1f1977ca" }, "downloads": -1, "filename": "PyTurboJPEG-1.3.0.tar.gz", "has_sig": false, "md5_digest": "c8b47896425a09d596da5b4f137c533b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5340, "upload_time": "2019-09-23T12:37:59", "upload_time_iso_8601": "2019-09-23T12:37:59.939145Z", "url": "https://files.pythonhosted.org/packages/00/83/6e66fc8250c675544a8352c83dc39c0cb5e39c4e29a86a01263683c2dad8/PyTurboJPEG-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "1a286a897f556477071325307ecdf17f", "sha256": "ad88e86160ab92210b59eaeac6ed5041b8b4e4c56cad2c00734a8100911b8de5" }, "downloads": -1, "filename": "PyTurboJPEG-1.3.1.tar.gz", "has_sig": false, "md5_digest": "1a286a897f556477071325307ecdf17f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5337, "upload_time": "2019-10-20T02:27:59", "upload_time_iso_8601": "2019-10-20T02:27:59.713837Z", "url": "https://files.pythonhosted.org/packages/c5/40/bc4aede28f6c922bcab9808a80982a69381df6e9b318dfa691fc6fe2eb36/PyTurboJPEG-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "4706396bcf32987d242a618fb7d20489", "sha256": "478597de41a145717f10835e123b3cc74249e6595924b5fa848fb253787cb3d3" }, "downloads": -1, "filename": "PyTurboJPEG-1.3.2.tar.gz", "has_sig": false, "md5_digest": "4706396bcf32987d242a618fb7d20489", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5421, "upload_time": "2019-10-26T02:59:07", "upload_time_iso_8601": "2019-10-26T02:59:07.222243Z", "url": "https://files.pythonhosted.org/packages/0d/88/4226f8eb3b4b5e950b4d077b684ddec68bdd7ad90b931bb46f51c2270b2c/PyTurboJPEG-1.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "3dd2629a1da4a6a2eef9e4019b961fce", "sha256": "9decac2028d246a300bb2b84021f28f2865fba39374993bab1651c0a27aab0bd" }, "downloads": -1, "filename": "PyTurboJPEG-1.4.0.tar.gz", "has_sig": false, "md5_digest": "3dd2629a1da4a6a2eef9e4019b961fce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6710, "upload_time": "2020-03-14T05:22:28", "upload_time_iso_8601": "2020-03-14T05:22:28.767783Z", "url": "https://files.pythonhosted.org/packages/1e/62/954b715c14919ef331f593da913353f3902703c23c3b41ff7b2f9c3a1b4d/PyTurboJPEG-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "df42ecc72debd4aef20537fd8d8cd512", "sha256": "09688a93331281e566569b4d313e1d1a058ca32ccae1a2473847a10e4ca2f2a7" }, "downloads": -1, "filename": "PyTurboJPEG-1.4.1.tar.gz", "has_sig": false, "md5_digest": "df42ecc72debd4aef20537fd8d8cd512", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6782, "upload_time": "2020-05-23T01:08:53", "upload_time_iso_8601": "2020-05-23T01:08:53.746823Z", "url": "https://files.pythonhosted.org/packages/9d/f5/6106c673096b1bc1af716bbc9b17e542c77ccad5fafd150afb91ff18a6e8/PyTurboJPEG-1.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "512b97325a0976b234612021f9f3a46c", "sha256": "7569a3fe1b8291ba2b71285fd814fe2f7c9b11f81d2952068899e4cfbe79c70a" }, "downloads": -1, "filename": "PyTurboJPEG-1.4.2.tar.gz", "has_sig": false, "md5_digest": "512b97325a0976b234612021f9f3a46c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6831, "upload_time": "2021-04-09T05:32:20", "upload_time_iso_8601": "2021-04-09T05:32:20.441958Z", "url": "https://files.pythonhosted.org/packages/16/26/a8664026d4023cfd02937ef30420234f81c51962c9269d79265f5c889f9c/PyTurboJPEG-1.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "06847687182f0e12fa274cf3b0534d0b", "sha256": "43b2957d1f64037d903d0156812482541e6c34e99217ccb927876605cd788ef8" }, "downloads": -1, "filename": "PyTurboJPEG-1.4.3.tar.gz", "has_sig": false, "md5_digest": "06847687182f0e12fa274cf3b0534d0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6847, "upload_time": "2021-04-23T22:06:19", "upload_time_iso_8601": "2021-04-23T22:06:19.701387Z", "url": "https://files.pythonhosted.org/packages/98/1b/25b4e1b0d59b82880e4e83a91bae697514e6d26a6d609d22ae445595fb68/PyTurboJPEG-1.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "eb0deaa41fc9e3e2b60ae4328a1498e8", "sha256": "8eecbc815a8e5ca4861aafa03813b606e2442f64478e3096243af0442beb6481" }, "downloads": -1, "filename": "PyTurboJPEG-1.5.0.tar.gz", "has_sig": false, "md5_digest": "eb0deaa41fc9e3e2b60ae4328a1498e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7249, "upload_time": "2021-04-29T15:28:22", "upload_time_iso_8601": "2021-04-29T15:28:22.942303Z", "url": "https://files.pythonhosted.org/packages/07/70/8397de6c39476d2cc0fcee6082ade0225b3e67bc4466a0cf07486b0d0de4/PyTurboJPEG-1.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "5f180983d6800e59458b890420d2d03d", "sha256": "e7a1672699d0cc53e5cf4bf9d3a0abc081dff6e5774752e26e7b842fb45c1428" }, "downloads": -1, "filename": "PyTurboJPEG-1.5.1.tar.gz", "has_sig": false, "md5_digest": "5f180983d6800e59458b890420d2d03d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7897, "upload_time": "2021-06-20T02:01:17", "upload_time_iso_8601": "2021-06-20T02:01:17.381395Z", "url": "https://files.pythonhosted.org/packages/f9/7b/7621780391ed7a33acec8e803068d7291d940fbbad1ffc8909e94e844477/PyTurboJPEG-1.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "4e24c109461bb747e63c2240450e37e5", "sha256": "a8e5c3fd3d513e524fd0e4e10ff1b50b31952d441515b2c26333eb93bfd23a2c" }, "downloads": -1, "filename": "PyTurboJPEG-1.5.2.tar.gz", "has_sig": false, "md5_digest": "4e24c109461bb747e63c2240450e37e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7901, "upload_time": "2021-08-16T10:53:17", "upload_time_iso_8601": "2021-08-16T10:53:17.710425Z", "url": "https://files.pythonhosted.org/packages/8c/9a/983484c341d8efe405191a249000eecfc337c9fd2358315ea757ed19715c/PyTurboJPEG-1.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "e7bb86d8881deeb6da4e5699276a87a9", "sha256": "71e17e7c912e402022c1e0cf41410ebfcfdb3141c38dd5cb9904d9e4ff90f043" }, "downloads": -1, "filename": "PyTurboJPEG-1.5.3.tar.gz", "has_sig": false, "md5_digest": "e7bb86d8881deeb6da4e5699276a87a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7906, "upload_time": "2021-09-07T09:27:19", "upload_time_iso_8601": "2021-09-07T09:27:19.034793Z", "url": "https://files.pythonhosted.org/packages/18/ee/26d4731bac9ed5f0d3d3e739168eadb20bbd93056b9eebbd4605f95c419c/PyTurboJPEG-1.5.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.4": [ { "comment_text": "", "digests": { "md5": "dca9f5396300e21e037c74bae30e111a", "sha256": "294db827a894db2f222f2c63262ba1e99ab1fadd4f541ae578e7ff9969df0382" }, "downloads": -1, "filename": "PyTurboJPEG-1.5.4.tar.gz", "has_sig": false, "md5_digest": "dca9f5396300e21e037c74bae30e111a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7928, "upload_time": "2021-09-14T00:04:48", "upload_time_iso_8601": "2021-09-14T00:04:48.891102Z", "url": "https://files.pythonhosted.org/packages/72/06/f3d4448b7f3d4d1e33786ed0fa8f8e23bc5d49efbfa1c174d44a2b2616aa/PyTurboJPEG-1.5.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "df13c16bf93a4a62cc723e4ff662f03e", "sha256": "4625a40e80444cc62280075bc5d8f9c5be61b7d990e6ace27c4d689aa4d5665a" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.1.tar.gz", "has_sig": false, "md5_digest": "df13c16bf93a4a62cc723e4ff662f03e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11176, "upload_time": "2021-09-21T12:59:22", "upload_time_iso_8601": "2021-09-21T12:59:22.733917Z", "url": "https://files.pythonhosted.org/packages/c8/41/35beeccd20a499d27b52b2a61ee12c772e2af51dabe554884376950be958/PyTurboJPEG-1.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "bfbf99f9fc72e8181dcf69a56e4b177c", "sha256": "80e7ff8b63b236d077a080135f38a34549e111a3251d1bf05973e0baa1c31b50" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.2.tar.gz", "has_sig": false, "md5_digest": "bfbf99f9fc72e8181dcf69a56e4b177c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11172, "upload_time": "2021-10-27T13:16:26", "upload_time_iso_8601": "2021-10-27T13:16:26.866964Z", "url": "https://files.pythonhosted.org/packages/21/25/70fbc0ab58818e8e23fb9a11e253bcdd19c89efbe5bd19409275504a33ab/PyTurboJPEG-1.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "453da7cb463a5ee785ee55cf8bc2dea9", "sha256": "e60f4c401eefa5eba8ad5184c6dd2c707b4b76b5a592e2ce64c4f7f05840b22e" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.3.tar.gz", "has_sig": false, "md5_digest": "453da7cb463a5ee785ee55cf8bc2dea9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11173, "upload_time": "2021-11-06T04:54:50", "upload_time_iso_8601": "2021-11-06T04:54:50.565511Z", "url": "https://files.pythonhosted.org/packages/f2/0c/d5f682d53cfd3a45e8855766cbd4f9b1de8df32648d04805b3d866782166/PyTurboJPEG-1.6.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "ba733abe1ba899fbfcdce521aec2dd5c", "sha256": "90020514aed59f02fba381b9d767fb91554304bcf64a78daa73ce934cfca34a0" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.4.tar.gz", "has_sig": false, "md5_digest": "ba733abe1ba899fbfcdce521aec2dd5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11190, "upload_time": "2022-01-01T13:22:17", "upload_time_iso_8601": "2022-01-01T13:22:17.036524Z", "url": "https://files.pythonhosted.org/packages/2a/30/deedc7ba93029bad44c0a010f70ba35e1f16c31aaa94ecda99ec328ae7b4/PyTurboJPEG-1.6.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.5": [ { "comment_text": "", "digests": { "md5": "538e0104dde76ed47f1604a68d2e47da", "sha256": "97779e0ff5868aa550d84f7658157c79344f55db549cfef03f86eb13c3cf4e4c" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.5.tar.gz", "has_sig": false, "md5_digest": "538e0104dde76ed47f1604a68d2e47da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11764, "upload_time": "2022-01-08T11:33:20", "upload_time_iso_8601": "2022-01-08T11:33:20.741713Z", "url": "https://files.pythonhosted.org/packages/f3/fd/0f1928a4f075f44922144f1b742998f2e0752839751dff783af380301f67/PyTurboJPEG-1.6.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6.6": [ { "comment_text": "", "digests": { "md5": "05d65f1b9612bf2184753b7b1054c022", "sha256": "80dd153484a8830dab4ebe7c0ee1cb43c5723a0e951375fd4ff8fa7f0d04757c" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.6.tar.gz", "has_sig": false, "md5_digest": "05d65f1b9612bf2184753b7b1054c022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11766, "upload_time": "2022-03-06T13:22:51", "upload_time_iso_8601": "2022-03-06T13:22:51.741451Z", "url": "https://files.pythonhosted.org/packages/9e/3c/92fbb6c17765030d6a2129d3ad6cf343376d2c295e21d93af82422955c17/PyTurboJPEG-1.6.6.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "05d65f1b9612bf2184753b7b1054c022", "sha256": "80dd153484a8830dab4ebe7c0ee1cb43c5723a0e951375fd4ff8fa7f0d04757c" }, "downloads": -1, "filename": "PyTurboJPEG-1.6.6.tar.gz", "has_sig": false, "md5_digest": "05d65f1b9612bf2184753b7b1054c022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11766, "upload_time": "2022-03-06T13:22:51", "upload_time_iso_8601": "2022-03-06T13:22:51.741451Z", "url": "https://files.pythonhosted.org/packages/9e/3c/92fbb6c17765030d6a2129d3ad6cf343376d2c295e21d93af82422955c17/PyTurboJPEG-1.6.6.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }