文章目录
近期眼研究图片的压缩方法,发现 JPEG算法解密这篇博客,讲的非常好。打算用python实现下相关算法。
一、Windows 配置libjpeg-turbo
参考链接:Windows 配置libjpeg-turbo并在python中调用
根据上述链接可以在windows上配置好libjpeg-turbo。这里可以小试一下。
这里可以参考链接:windows7 64位机上,libjpeg-turbo的安装和使用
1.1、vs2019上测试jpeg算法
- 添加头文件
调试->属性->c/c++->常规->附加包含目录
D:\cplusplus\library\libjpeg-turbo-main
- 添加静态库
我cmake时安装的目录是install,这里路径要根据实际安装来修改。
调试->属性->链接器->常规->附加库目录
,
D:\cplusplus\library\libjpeg-turbo-main\install\Debug
调试->属性->链接器->输入->附加依赖项
jpeg-static.lib
在测试时需要将install中jconfig.h
拷贝到根目录下,否则会找不到。测试代码可以参考windows7 64位机上,libjpeg-turbo的安装和使用
二、安装PyTurboJPEG库
clone代码:https://github.com/lilohuang/PyTurboJPEG.git
2.1、修改PyTurboJPEG库配置
将第一步中生成的turbojpeg.dll
拷贝到C:\Windows\System32
目录下,其次还需要修改PyTurboJPEG库中的setup.py
文件,将38~50行:
DEFAULT_LIB_PATHS = {
'Darwin': ['/usr/local/opt/jpeg-turbo/lib/libturbojpeg.dylib'],
'Linux': [
'/usr/lib/x86_64-linux-gnu/libturbojpeg.so.0',
'/usr/lib64/libturbojpeg.so.0',
'/opt/libjpeg-turbo/lib64/libturbojpeg.so'
],
'FreeBSD': [
'/usr/local/lib/libturbojpeg.so.0',
'/usr/local/lib/libturbojpeg.so'
],
'Windows': ['C:/libjpeg-turbo64/bin/turbojpeg.dll']
}
修改为:
DEFAULT_LIB_PATHS = {
'Darwin': ['/usr/local/opt/jpeg-turbo/lib/libturbojpeg.dylib'],
'Linux': [
'/usr/lib/x86_64-linux-gnu/libturbojpeg.so.0',
'/usr/lib64/libturbojpeg.so.0',
'/opt/libjpeg-turbo/lib64/libturbojpeg.so'
],
'FreeBSD': [
'/usr/local/lib/libturbojpeg.so.0',
'/usr/local/lib/libturbojpeg.so'
],
'Windows': ['turbojpeg.dll']
}
2.2、安装PyTurboJPEG库
cd
到安装PyTurboJPEG库根目录下,执行
python setup.py install
三、使用PyTurboJPEG库
from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT
if __name__ == "__main__":
in_file=open(r"D:\data\face\good3\1630905185050.jpeg","rb")
out_file=open("test.jpg",'wb')
jpeg = TurboJPEG()
img=jpeg.decode(in_file.read())
img=jpeg.encode(img,quality=80)
out_file.write(img)
Windows下PyTurboJPEG与opencv压缩算法的速度比较
Function | Wall-clock time |
---|---|
cv2.imdecode() | 0.358 sec |
TurboJPEG.decode() | 0.135 sec |
cv2.imencode() | 0.581 sec |
TurboJPEG.encode() | 0.140 sec |
可以看出libjpeg算法速度还是优于opencv自带的压缩算法的。。。