Windows下实现BPG压缩以及解压缩(包含python批量处理图片)
介绍
BPG(Better Portable Graphics)是一种新的图像格式。 其目的是在质量或文件大小成问题时替换JPEG图像格式。 它的主要优点是:
- 压缩比高。 对于类似的质量,文件比JPEG小得多。
- 大多数Web浏览器都支持小型Javascript解码器(gzip压缩大小:56 KB)。
- 基于HEVC开放视频压缩标准的子集。
- 支持与JPEG(灰度,YCbCr 4:2:0,4:2:2,4:4:4)相同的色度格式,以减少转换过程中的损耗。 支持Alpha通道。 还支持RGB,YCgCo和CMYK颜色空间。
- 本机支持每通道8至14位,以获得更高的动态范围。
- 支持无损压缩。
- 可以包括各种元数据(例如EXIF,ICC配置文件,XMP)。
- 动画支持。
下载
以下存档包含bpgenc,bpgdec和bpgview命令行实用程序(对于Linux)和关联的libbpg库(读取存档中的README文件)的源代码。 它还包括Javascript解码器的源代码:libbpg-0.9.8.tar.gz
Windows的二进制分发(仅限64位):bpg-0.9.8-win64.zip
以下链接可以下载上述两个工具:
非官方的Github镜像。https://github.com/mirrorer/libbpg
对于Mac用户,可以在libbpg Homebrew 公式中使用BPG实用程序。
参数介绍(可直接使用工具**bpg-0.9.8-win64.zip** )
1. 编码
bpgenc -m 9 -b 8 -q 48 input.png -o output.bpg # -m 控制速度 -b 控制位深度 -q 控制图像质量 -o 输出图像
BPG命令行编码器是
'bpgenc'。它需要JPEG或PNG图像作为输入。有以下几个参数
-
速度:默认情况下,bpgenc使用x265。你可以编译很多更慢但更高效的JCTVC编码器,并使用’-ejctvc’选项选择它。使用x265,您可以使用
'-m'
选项选择编码速度(1 =快速,但图像较大,9 =较慢但图像较小)。 -
位深度:默认位深度为8.您可以将其增加到10(
'-b 10'
选项)以略微提高压缩比。对于Web发布,它通常不是一个好主意,因为Javascript解码器使用更多内存。编译后的x265编码器支持8,10和12的位深度。通过启用Makefile定义:USE_JCTVC_HIGH_BIT_DEPTH
,可以编译较慢的JCTVC编码器以支持更高的位深度(最多14位)。 -
通过HEVC无损功能支持无损压缩作为奖励。除非你知道你做了什么,否则在这种情况下使用PNG输入!在JPEG输入的情况下,压缩与JPEG YCbCr数据无关,而与RGB数据无关。在任何情况下,位深度应与您的图片匹配,否则文件大小会增加很多。默认情况下,无损模式将位深度设置为8位。首选颜色空间设置为“rgb”。笔记:
无损模式对损耗模式的测试较少,但它通常会在摄影图像上提供更好的PNG结果。
-
JCTVC编码器比具有无损压缩的x265编码器提供更小的图像。
量化器的解释存在细微差别x265和JCTVC编码器之间的参数(
-q选项)。对于图像压缩这个参数是比较重要的,它控制图像质量,取值范围[1,51],数值越高压缩率越大,图像质量越差。
色彩空间和色度格式:
*对于JPEG输入,不修改输入图像的色彩空间(YCbCr,RGB,YCbCrK或CMYK)。根据优选的色度格式(
'-f'选项)对色度进行二次采样。
*对于PNG输入,输入图像将转换为首选颜色空间(
'-c'选项)。然后根据优选的色度格式对其色度进行二次采样。
*灰度图像保持不变。
预乘alpha:默认情况下,bpgenc使用非预乘alpha来保留颜色分量。然而,预乘alpha(
'-premul'选项)通常以牺牲颜色分量的损失为代价提供更好的压缩。如果未编辑图像,则此丢失不是问题。
动画:使用’-a’选项,动画可以从一系列PNG或JPEG图像编码,索引从1或0.例如:
./ bpgenc -a anim%2d.png -fps 25 -loop 0 - o anim.bpg
2. 解码
bpgdec -o output.jpg input.bpg
BPG命令行解码器是
bpgdec。 它输出PNG或PPM图像。 使用PPM输出以获得最快的速度。
-
使用
'-i'
选项,您可以获得有关BPG图像的信息(并且不输出解码图像)。 -
'-b'
选项选择PNG输出的位深度(8或16)。 它独立于内部BPG位深度。
批量使用BPG
这里使用 os 库 中的
system操作来调用外部命令。这里需要将代码
py文件和
bpg-0.9.8-win64.zip解压后的文件在同一文件夹,否则运行命令的时候需要使用绝对路径。
import os root_dir = 'D:\\Colorization_Set_test\\test_gray' for item in os.listdir(root_dir): # 遍历root_dir name = root_dir + '\\' + item # 获取图片路径 save_dir = 'D:\\Colorization_Set_test\\encode' + str(i) + '_bpg\\' # 存储编码结果 save_dir1 = 'D:\\Colorization_Set_test\\decode' + str(i) + '_bpg\\' # 存储解码结果 if not os.path.exists(save_dir): os.makedirs(save_dir) if not os.path.exists(save_dir1): os.makedirs(save_dir1) os.system('bpgenc -m 9 -b 8 -q 40 ' + name + ' -o ' + save_dir + item.split('.')[0] + '.bpg') os.system('bpgdec -o ' + save_dir1 + item.split('.')[0] + '.jpg' + ' ' + save_dir + item.split('.')[0] + '.bpg')
- Python 实现 深度学习图片爬虫、以及批量处理工具
- Python图片中的缩放实现,以及多种尺寸icon的生成
- javascript实现图片上传以及预览(包含相关知识点汇总)
- python 实现tif图片转jpg图片 windows下
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
- Python实现邮件的发送(含图片以及超链接)
- windows下Python实现将pdf文件转化为png格式图片的方法
- Python实现批量压缩图片
- Python3.2 实现zip压缩与解压缩功能
- Bitmap,jpg,png区别以及在Android上实现不载入内存压缩图片
- Python 下载网页 Jpg 图片以及 Gif 图片实现
- H5技术完美实现调用手机摄像头、相册。图片上传base64,图片压缩、预览、删除以及图片旋转90度的处理--demo。
- Optipng,jpegoptim应用,用python实现图片压缩,让你的网站变得更快
- android 里面对图片的不同压缩处理 以及简单拍照功能实现加设置闪光灯效果
- Python实现自动存储Windows 10锁屏聚焦图片到指定文件夹
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
- Python实现向服务器请求压缩数据及解压缩数据的方法示例
- python爬虫实现带附件+html内容以及图片的邮件发送
- windows下python3.5安装setuptools以及百度坐标系(bd-09)、火星坐标系(国测局坐标系、gcj02)、WGS84坐标系之间的坐标互转python实现以及python中exce