Windows下实现BPG压缩以及解压缩(包含python批量处理图片)
介紹
BPG(Better Portable Graphics)是一種新的圖像格式。 其目的是在質量或文件大小成問題時替換JPEG圖像格式。 它的主要優點是:
下載
以下存檔包含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.bpgBPG命令行解碼器是bpgdec。 它輸出PNG或PPM圖像。 使用PPM輸出以獲得最快的速度。
-
使用'-i'選項,您可以獲得有關BPG圖像的信息(并且不輸出解碼圖像)。
-
'-b'選項選擇PNG輸出的位深度(8或16)。 它獨立于內部BPG位深度。
批量使用BPG
這里使用 os 庫 中的 system 操作來調用外部命令。這里需要將代碼py文件和 bpg-0.9.8-win64.zip解壓后的文件在同一文件夾,否則運行命令的時候需要使用絕對路徑。
import osroot_dir = 'D:\\Colorization_Set_test\\test_gray' for item in os.listdir(root_dir): # 遍歷root_dirname = 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')總結
以上是生活随笔為你收集整理的Windows下实现BPG压缩以及解压缩(包含python批量处理图片)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息化时代客户关系管理对企业的重要性
- 下一篇: HashMap之TreeNode(红黑树