Windows下实现BPG压缩以及解压缩(包含python批量处理图⽚)
介绍
BPG(Better Portable Graphics)是⼀种新的图像格式。 其⽬的是在质量或⽂件⼤⼩成问题时替换JPEG图像格式。 它的主要优点是:
1. 压缩⽐⾼。 对于类似的质量,⽂件⽐JPEG⼩得多。
2. ⼤多数Web浏览器都⽀持⼩型Javascript解码器(gzip压缩⼤⼩:56 KB)。
3. 基于HEVC开放视频压缩标准的⼦集。
4. ⽀持与JPEG(灰度,YCbCr 4:2:0,4:2:2,4:4:4)相同的⾊度格式,以减少转换过程中的损耗。 ⽀持Alpha通道。 还⽀持
RGB,YCgCo和CMYK颜⾊空间。
5. 本机⽀持每通道8⾄14位,以获得更⾼的动态范围。
6. ⽀持⽆损压缩。
7. 可以包括各种元数据(例如EXIF,ICC配置⽂件,XMP)。
8. 动画⽀持。
下载
以下存档包含bpgenc,bpgdec和bpgview命令⾏实⽤程序(对于Linux)和关联的libbpg库(读取存档中的README⽂件)的源代码。它还包括Javascript解码器的源代码:libbpg-0.9.
Windows的⼆进制分发(仅限64位):bpg-0.9.8-win64.zip
以下链接可以下载上述两个⼯具:
参数介绍(可直接使⽤⼯具**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 ists(save_dir):
os.makedirs(save_dir)
if not ists(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')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论