summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-10 17:36:20 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-10 17:36:20 +0000
commit9c00f210e5016188657074fc9e32bb8e8d79d2e2 (patch)
tree4d4d65c491264478a36295ee2083f09409125fe0
parent7150530d677c6216f28b7f61f68e55ad922e5bb8 (diff)
automatic import of python-pyturbojpeg
-rw-r--r--.gitignore1
-rw-r--r--python-pyturbojpeg.spec651
-rw-r--r--sources1
3 files changed, 653 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..5fbc91f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/PyTurboJPEG-1.7.0.tar.gz
diff --git a/python-pyturbojpeg.spec b/python-pyturbojpeg.spec
new file mode 100644
index 0000000..4495708
--- /dev/null
+++ b/python-pyturbojpeg.spec
@@ -0,0 +1,651 @@
+%global _empty_manifest_terminate_build 0
+Name: python-PyTurboJPEG
+Version: 1.7.0
+Release: 1
+Summary: A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.
+License: MIT
+URL: https://github.com/lilohuang/PyTurboJPEG
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/26/28/fe06582ced95e3673ba30728f889b6ba97ecd1ff9d05f9641d69c7d1a568/PyTurboJPEG-1.7.0.tar.gz
+BuildArch: noarch
+
+
+%description
+# PyTurboJPEG
+A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.
+
+## Prerequisites
+- [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo/releases)
+- [numpy](https://github.com/numpy/numpy)
+
+## Example
+
+```python
+import cv2
+from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT
+
+# specifying library path explicitly
+# jpeg = TurboJPEG(r'D:\turbojpeg.dll')
+# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')
+# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')
+
+# using default library installation
+jpeg = TurboJPEG()
+
+# decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read())
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# decoding input.jpg to BGR array with fast upsample and fast DCT. (i.e. fastest speed but lower accuracy)
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read(), flags=TJFLAG_FASTUPSAMPLE|TJFLAG_FASTDCT)
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# direct rescaling 1/2 while decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))
+in_file.close()
+cv2.imshow('bgr_array_half', bgr_array_half)
+cv2.waitKey(0)
+
+# getting possible scaling factors for direct rescaling
+scaling_factors = jpeg.scaling_factors
+
+# decoding JPEG image properties
+in_file = open('input.jpg', 'rb')
+width, height, jpeg_subsample, jpeg_colorspace = jpeg.decode_header(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV array
+in_file = open('input.jpg', 'rb')
+buffer_array, plane_sizes = jpeg.decode_to_yuv(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV planes
+in_file = open('input.jpg', 'rb')
+planes = jpeg.decode_to_yuv_planes(in_file.read())
+in_file.close()
+
+# encoding BGR array to output.jpg with default settings.
+out_file = open('output.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array))
+out_file.close()
+
+# encoding BGR array to output.jpg with TJSAMP_GRAY subsample.
+out_file = open('output_gray.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, jpeg_subsample=TJSAMP_GRAY))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 50.
+out_file = open('output_quality_50.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=50))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 100 and progressive entropy coding.
+out_file = open('output_quality_100_progressive.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=100, flags=TJFLAG_PROGRESSIVE))
+out_file.close()
+
+# decoding input.jpg to grayscale array
+in_file = open('input.jpg', 'rb')
+gray_array = jpeg.decode(in_file.read(), pixel_format=TJPF_GRAY)
+in_file.close()
+cv2.imshow('gray_array', gray_array)
+cv2.waitKey(0)
+
+# scale with quality but leaves out the color conversion step
+in_file = open('input.jpg', 'rb')
+out_file = open('scaled_output.jpg', 'wb')
+out_file.write(jpeg.scale_with_quality(in_file.read(), scaling_factor=(1, 4), quality=70))
+out_file.close()
+in_file.close()
+
+# lossless crop image
+out_file = open('lossless_cropped_output.jpg', 'wb')
+out_file.write(jpeg.crop(open('input.jpg', 'rb').read(), 8, 8, 320, 240))
+out_file.close()
+```
+
+```python
+# using PyTurboJPEG with ExifRead to transpose an image if the image has an EXIF Orientation tag.
+#
+# pip install PyTurboJPEG -U
+# pip install exifread -U
+
+import cv2
+import numpy as np
+import exifread
+from turbojpeg import TurboJPEG
+
+def transposeImage(image, orientation):
+ """See Orientation in https://www.exif.org/Exif2-2.PDF for details."""
+ if orientation == None: return image
+ val = orientation.values[0]
+ if val == 1: return image
+ elif val == 2: return np.fliplr(image)
+ elif val == 3: return np.rot90(image, 2)
+ elif val == 4: return np.flipud(image)
+ elif val == 5: return np.rot90(np.flipud(image), -1)
+ elif val == 6: return np.rot90(image, -1)
+ elif val == 7: return np.rot90(np.flipud(image))
+ elif val == 8: return np.rot90(image)
+
+# using default library installation
+turbo_jpeg = TurboJPEG()
+# open jpeg file
+in_file = open('foobar.jpg', 'rb')
+# parse orientation
+orientation = exifread.process_file(in_file).get('Image Orientation', None)
+# seek file position back to 0 before decoding JPEG image
+in_file.seek(0)
+# start to decode the JPEG file
+image = turbo_jpeg.decode(in_file.read())
+# transpose image based on EXIF Orientation tag
+transposed_image = transposeImage(image, orientation)
+# close the file since it's no longer needed.
+in_file.close()
+
+cv2.imshow('transposed_image', transposed_image)
+cv2.waitKey(0)
+```
+
+## Installation
+
+### macOS
+- brew install jpeg-turbo
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Windows
+- Download [libjpeg-turbo official installer](https://sourceforge.net/projects/libjpeg-turbo/files)
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Linux
+- RHEL/CentOS/Fedora
+ - Download [libjpeg-turbo.repo](https://libjpeg-turbo.org/pmwiki/uploads/Downloads/libjpeg-turbo.repo) to /etc/yum.repos.d/
+ - sudo yum install libjpeg-turbo-official
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+- Ubuntu
+ - sudo apt-get update
+ - sudo apt-get install libturbojpeg
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+## Benchmark
+
+### macOS
+- macOS Sierra 10.12.6
+- Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.528 sec   |
+| TurboJPEG.decode() | 0.191 sec |
+| cv2.imencode()       | 0.875 sec   |
+| TurboJPEG.encode() | 0.176 sec |
+
+### Windows
+- Windows 7 Ultimate 64-bit
+- Intel(R) Xeon(R) E3-1276 v3 CPU @ 3.60 GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.358 sec   |
+| TurboJPEG.decode() | 0.135 sec |
+| cv2.imencode()       | 0.581 sec   |
+| TurboJPEG.encode() | 0.140 sec |
+
+
+
+
+%package -n python3-PyTurboJPEG
+Summary: A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.
+Provides: python-PyTurboJPEG
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-PyTurboJPEG
+# PyTurboJPEG
+A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.
+
+## Prerequisites
+- [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo/releases)
+- [numpy](https://github.com/numpy/numpy)
+
+## Example
+
+```python
+import cv2
+from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT
+
+# specifying library path explicitly
+# jpeg = TurboJPEG(r'D:\turbojpeg.dll')
+# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')
+# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')
+
+# using default library installation
+jpeg = TurboJPEG()
+
+# decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read())
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# decoding input.jpg to BGR array with fast upsample and fast DCT. (i.e. fastest speed but lower accuracy)
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read(), flags=TJFLAG_FASTUPSAMPLE|TJFLAG_FASTDCT)
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# direct rescaling 1/2 while decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))
+in_file.close()
+cv2.imshow('bgr_array_half', bgr_array_half)
+cv2.waitKey(0)
+
+# getting possible scaling factors for direct rescaling
+scaling_factors = jpeg.scaling_factors
+
+# decoding JPEG image properties
+in_file = open('input.jpg', 'rb')
+width, height, jpeg_subsample, jpeg_colorspace = jpeg.decode_header(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV array
+in_file = open('input.jpg', 'rb')
+buffer_array, plane_sizes = jpeg.decode_to_yuv(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV planes
+in_file = open('input.jpg', 'rb')
+planes = jpeg.decode_to_yuv_planes(in_file.read())
+in_file.close()
+
+# encoding BGR array to output.jpg with default settings.
+out_file = open('output.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array))
+out_file.close()
+
+# encoding BGR array to output.jpg with TJSAMP_GRAY subsample.
+out_file = open('output_gray.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, jpeg_subsample=TJSAMP_GRAY))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 50.
+out_file = open('output_quality_50.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=50))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 100 and progressive entropy coding.
+out_file = open('output_quality_100_progressive.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=100, flags=TJFLAG_PROGRESSIVE))
+out_file.close()
+
+# decoding input.jpg to grayscale array
+in_file = open('input.jpg', 'rb')
+gray_array = jpeg.decode(in_file.read(), pixel_format=TJPF_GRAY)
+in_file.close()
+cv2.imshow('gray_array', gray_array)
+cv2.waitKey(0)
+
+# scale with quality but leaves out the color conversion step
+in_file = open('input.jpg', 'rb')
+out_file = open('scaled_output.jpg', 'wb')
+out_file.write(jpeg.scale_with_quality(in_file.read(), scaling_factor=(1, 4), quality=70))
+out_file.close()
+in_file.close()
+
+# lossless crop image
+out_file = open('lossless_cropped_output.jpg', 'wb')
+out_file.write(jpeg.crop(open('input.jpg', 'rb').read(), 8, 8, 320, 240))
+out_file.close()
+```
+
+```python
+# using PyTurboJPEG with ExifRead to transpose an image if the image has an EXIF Orientation tag.
+#
+# pip install PyTurboJPEG -U
+# pip install exifread -U
+
+import cv2
+import numpy as np
+import exifread
+from turbojpeg import TurboJPEG
+
+def transposeImage(image, orientation):
+ """See Orientation in https://www.exif.org/Exif2-2.PDF for details."""
+ if orientation == None: return image
+ val = orientation.values[0]
+ if val == 1: return image
+ elif val == 2: return np.fliplr(image)
+ elif val == 3: return np.rot90(image, 2)
+ elif val == 4: return np.flipud(image)
+ elif val == 5: return np.rot90(np.flipud(image), -1)
+ elif val == 6: return np.rot90(image, -1)
+ elif val == 7: return np.rot90(np.flipud(image))
+ elif val == 8: return np.rot90(image)
+
+# using default library installation
+turbo_jpeg = TurboJPEG()
+# open jpeg file
+in_file = open('foobar.jpg', 'rb')
+# parse orientation
+orientation = exifread.process_file(in_file).get('Image Orientation', None)
+# seek file position back to 0 before decoding JPEG image
+in_file.seek(0)
+# start to decode the JPEG file
+image = turbo_jpeg.decode(in_file.read())
+# transpose image based on EXIF Orientation tag
+transposed_image = transposeImage(image, orientation)
+# close the file since it's no longer needed.
+in_file.close()
+
+cv2.imshow('transposed_image', transposed_image)
+cv2.waitKey(0)
+```
+
+## Installation
+
+### macOS
+- brew install jpeg-turbo
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Windows
+- Download [libjpeg-turbo official installer](https://sourceforge.net/projects/libjpeg-turbo/files)
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Linux
+- RHEL/CentOS/Fedora
+ - Download [libjpeg-turbo.repo](https://libjpeg-turbo.org/pmwiki/uploads/Downloads/libjpeg-turbo.repo) to /etc/yum.repos.d/
+ - sudo yum install libjpeg-turbo-official
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+- Ubuntu
+ - sudo apt-get update
+ - sudo apt-get install libturbojpeg
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+## Benchmark
+
+### macOS
+- macOS Sierra 10.12.6
+- Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.528 sec   |
+| TurboJPEG.decode() | 0.191 sec |
+| cv2.imencode()       | 0.875 sec   |
+| TurboJPEG.encode() | 0.176 sec |
+
+### Windows
+- Windows 7 Ultimate 64-bit
+- Intel(R) Xeon(R) E3-1276 v3 CPU @ 3.60 GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.358 sec   |
+| TurboJPEG.decode() | 0.135 sec |
+| cv2.imencode()       | 0.581 sec   |
+| TurboJPEG.encode() | 0.140 sec |
+
+
+
+
+%package help
+Summary: Development documents and examples for PyTurboJPEG
+Provides: python3-PyTurboJPEG-doc
+%description help
+# PyTurboJPEG
+A Python wrapper of libjpeg-turbo for decoding and encoding JPEG image.
+
+## Prerequisites
+- [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo/releases)
+- [numpy](https://github.com/numpy/numpy)
+
+## Example
+
+```python
+import cv2
+from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT
+
+# specifying library path explicitly
+# jpeg = TurboJPEG(r'D:\turbojpeg.dll')
+# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')
+# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')
+
+# using default library installation
+jpeg = TurboJPEG()
+
+# decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read())
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# decoding input.jpg to BGR array with fast upsample and fast DCT. (i.e. fastest speed but lower accuracy)
+in_file = open('input.jpg', 'rb')
+bgr_array = jpeg.decode(in_file.read(), flags=TJFLAG_FASTUPSAMPLE|TJFLAG_FASTDCT)
+in_file.close()
+cv2.imshow('bgr_array', bgr_array)
+cv2.waitKey(0)
+
+# direct rescaling 1/2 while decoding input.jpg to BGR array
+in_file = open('input.jpg', 'rb')
+bgr_array_half = jpeg.decode(in_file.read(), scaling_factor=(1, 2))
+in_file.close()
+cv2.imshow('bgr_array_half', bgr_array_half)
+cv2.waitKey(0)
+
+# getting possible scaling factors for direct rescaling
+scaling_factors = jpeg.scaling_factors
+
+# decoding JPEG image properties
+in_file = open('input.jpg', 'rb')
+width, height, jpeg_subsample, jpeg_colorspace = jpeg.decode_header(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV array
+in_file = open('input.jpg', 'rb')
+buffer_array, plane_sizes = jpeg.decode_to_yuv(in_file.read())
+in_file.close()
+
+# decoding input.jpg to YUV planes
+in_file = open('input.jpg', 'rb')
+planes = jpeg.decode_to_yuv_planes(in_file.read())
+in_file.close()
+
+# encoding BGR array to output.jpg with default settings.
+out_file = open('output.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array))
+out_file.close()
+
+# encoding BGR array to output.jpg with TJSAMP_GRAY subsample.
+out_file = open('output_gray.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, jpeg_subsample=TJSAMP_GRAY))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 50.
+out_file = open('output_quality_50.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=50))
+out_file.close()
+
+# encoding BGR array to output.jpg with quality level 100 and progressive entropy coding.
+out_file = open('output_quality_100_progressive.jpg', 'wb')
+out_file.write(jpeg.encode(bgr_array, quality=100, flags=TJFLAG_PROGRESSIVE))
+out_file.close()
+
+# decoding input.jpg to grayscale array
+in_file = open('input.jpg', 'rb')
+gray_array = jpeg.decode(in_file.read(), pixel_format=TJPF_GRAY)
+in_file.close()
+cv2.imshow('gray_array', gray_array)
+cv2.waitKey(0)
+
+# scale with quality but leaves out the color conversion step
+in_file = open('input.jpg', 'rb')
+out_file = open('scaled_output.jpg', 'wb')
+out_file.write(jpeg.scale_with_quality(in_file.read(), scaling_factor=(1, 4), quality=70))
+out_file.close()
+in_file.close()
+
+# lossless crop image
+out_file = open('lossless_cropped_output.jpg', 'wb')
+out_file.write(jpeg.crop(open('input.jpg', 'rb').read(), 8, 8, 320, 240))
+out_file.close()
+```
+
+```python
+# using PyTurboJPEG with ExifRead to transpose an image if the image has an EXIF Orientation tag.
+#
+# pip install PyTurboJPEG -U
+# pip install exifread -U
+
+import cv2
+import numpy as np
+import exifread
+from turbojpeg import TurboJPEG
+
+def transposeImage(image, orientation):
+ """See Orientation in https://www.exif.org/Exif2-2.PDF for details."""
+ if orientation == None: return image
+ val = orientation.values[0]
+ if val == 1: return image
+ elif val == 2: return np.fliplr(image)
+ elif val == 3: return np.rot90(image, 2)
+ elif val == 4: return np.flipud(image)
+ elif val == 5: return np.rot90(np.flipud(image), -1)
+ elif val == 6: return np.rot90(image, -1)
+ elif val == 7: return np.rot90(np.flipud(image))
+ elif val == 8: return np.rot90(image)
+
+# using default library installation
+turbo_jpeg = TurboJPEG()
+# open jpeg file
+in_file = open('foobar.jpg', 'rb')
+# parse orientation
+orientation = exifread.process_file(in_file).get('Image Orientation', None)
+# seek file position back to 0 before decoding JPEG image
+in_file.seek(0)
+# start to decode the JPEG file
+image = turbo_jpeg.decode(in_file.read())
+# transpose image based on EXIF Orientation tag
+transposed_image = transposeImage(image, orientation)
+# close the file since it's no longer needed.
+in_file.close()
+
+cv2.imshow('transposed_image', transposed_image)
+cv2.waitKey(0)
+```
+
+## Installation
+
+### macOS
+- brew install jpeg-turbo
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Windows
+- Download [libjpeg-turbo official installer](https://sourceforge.net/projects/libjpeg-turbo/files)
+- pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+### Linux
+- RHEL/CentOS/Fedora
+ - Download [libjpeg-turbo.repo](https://libjpeg-turbo.org/pmwiki/uploads/Downloads/libjpeg-turbo.repo) to /etc/yum.repos.d/
+ - sudo yum install libjpeg-turbo-official
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+- Ubuntu
+ - sudo apt-get update
+ - sudo apt-get install libturbojpeg
+ - pip install -U git+https://github.com/lilohuang/PyTurboJPEG.git
+
+## Benchmark
+
+### macOS
+- macOS Sierra 10.12.6
+- Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.528 sec   |
+| TurboJPEG.decode() | 0.191 sec |
+| cv2.imencode()       | 0.875 sec   |
+| TurboJPEG.encode() | 0.176 sec |
+
+### Windows
+- Windows 7 Ultimate 64-bit
+- Intel(R) Xeon(R) E3-1276 v3 CPU @ 3.60 GHz
+- opencv-python 3.4.0.12 (pre-built)
+- turbo-jpeg 1.5.3 (pre-built)
+
+| Function | Wall-clock time |
+| ----------------------|-----------------|
+| cv2.imdecode()       | 0.358 sec   |
+| TurboJPEG.decode() | 0.135 sec |
+| cv2.imencode()       | 0.581 sec   |
+| TurboJPEG.encode() | 0.140 sec |
+
+
+
+
+%prep
+%autosetup -n PyTurboJPEG-1.7.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-PyTurboJPEG -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 1.7.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..93261a3
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+86cd27b0a9b8ead6b05186b4c9d5c2f3 PyTurboJPEG-1.7.0.tar.gz