1. 程式人生 > >python工具(1) — 圖片的位深度壓縮

python工具(1) — 圖片的位深度壓縮

在遊戲開發專案中,圖片資源是最多的、佔用空間也是最大的,因此我們需要降低圖片的佔用空間,我們用開源的軟體pngquant來實現將32bit圖片壓縮為8bit的圖片,關於pngquant,請戳:pngquant官網 , 我們只需要下載它的.exe檔案就可以。

接下來是去python官網下載PIL(Python Image Library),因為我們需要它來檢測png圖片的格式。

準備好這些後,就可以寫一個python指令碼來實現了:

import os
import os.path
import Image

# Please reset the root directory Path !
ImageFilePath = "E:\Resources"

def getFilesAbsolutelyPath(ImageFilePath):
    currentfiles = os.listdir(ImageFilePath)
    filesVector = []
    for file_name in currentfiles:
        fullPath = os.path.join(ImageFilePath, file_name)
        if os.path.isdir(fullPath):
            newfiles = getFilesAbsolutelyPath(fullPath)
            filesVector.extend(newfiles)
        else:
            filesVector.append(fullPath)
    return filesVector

filePathVector = getFilesAbsolutelyPath(ImageFilePath)
pngFile = []

for filename in filePathVector:
    flag = filename.find(".png")
    if flag != -1:
        im = Image.open(filename)
        if im.mode != "P":
            pngFile.append(filename) 
            print(mode)

# pngquant.exe path
pngquantPath = "E:\Resources\pngquant.exe -f --ext .png --quality 50-80 "
#get .Png File Name
for filename in pngFile:
	os.system(pngquantPath + filename)

os.listdir(path),返回值是個list,存放了當前path目錄下所有的檔案/資料夾,os.path.join(path, file_name)會將當前的檔案/檔名前面新增path根目錄名,從而使檔名的路徑為絕對路徑; 然後通過os.path.isdir(fullpath)判斷當前的file_name是否為一個目錄,如果是目錄,則遞迴處理它,最後得到的newfiles即為該目錄下所有的檔名。

獲取到所有的png檔案後,需要判斷檔案當前是否經過pngquant處理了,im = Image.open(filename),開啟檔案後,im攜帶了檔案的資訊,im.mode值為一個str,如果png檔案已經經過了pngquant處理,那麼它的mode值為"P",否則為"RGBA", 我們將未處理過的圖片儲存到一個list中。

最後使用pngquant.exe來處理這些圖片,pngquant引數如下:


-f 引數代表的意思為: overwrite existing output files,改寫已經存在的檔案,即我們需要將處理後的圖片覆蓋原來的圖片。

--ext .png表示圖片處理後的副檔名為.png

--quality 50-80 表示圖片的質量最低為原來的50%,低於這個值將會出錯。

我們用 E:\Resources\pngquant.exe -f --ext .png --quality 50-80 filename來處理每一個檔案。

關於mode,PIL官網上這麼寫的:

1 (1-bit pixels, black and white, stored with one pixel per byte)
L (8-bit pixels, black and white)
P (8-bit pixels, mapped to any other mode using a colour palette)
RGB (3x8-bit pixels, true colour)
RGBA (4x8-bit pixels, true colour with transparency mask)
CMYK (4x8-bit pixels, colour separation)
YCbCr (3x8-bit pixels, colour video format)
I (32-bit signed integer pixels)
F (32-bit floating point pixels

我們從美術那裡得到的原始的png圖片為32bit的RGBA圖片,含有Alpha通道掩碼值,經pngquant壓縮後成為8bit的P圖片,P表示的是,8位畫素,用到調色盤因此可以對映到其他任意的mode,所以此時它類似於一個查色表,可以對映到其他任意模式。

相關推薦

python工具(1) — 圖片深度壓縮

在遊戲開發專案中,圖片資源是最多的、佔用空間也是最大的,因此我們需要降低圖片的佔用空間,我們用開源的軟體pngquant來實現將32bit圖片壓縮為8bit的圖片,關於pngquant,請戳:pngquant官網 , 我們只需要下載它的.exe檔案就可以。 接下來是去py

C# 圖片深度轉至8灰度影象,8灰度影象轉為1灰度影象

        #region 二值化         #region Otsu閾值法二值化模組            /// <summary>            /// Otsu閾值            /// </summary>  

Python實戰1- 圖片轉字元畫

一、步驟 分析:字元畫原理是將圖片的灰度值與個人設定的字符集之間建立對映關係,不同區間的灰度值對應不同的字元,之後將圖片每一個畫素對應的字元打印出來,即可獲得字元畫 將原圖片轉化為灰度圖片 方案一:利用灰度公式將畫素的 RGB 值對映到灰度值 gray =

嘗試用python開發一款圖片壓縮工具1:嘗試 pillow庫

開發目的 我經常使用圖片。公眾號文章發文也好,還是生活中要使用素材。圖片是一種比文字更加直觀的載體。但是圖片更加佔用頻寬,很多軟體都對圖片有大小限制。圖片太大也會影響載入速度。我試過幾款圖片壓縮工具,比如 tinypng 和 tinyjpg 非常好用,體驗也非常棒。但是它存在幾個侷限的地方: 1, 每次不

Python的支持工具[1] -> 可執行文件生成工具 -> cx_freeze

pack orm excludes ase rom ble font mes package cx_freeze cx_Freeze 是一個第三方庫,可以用於將 Python 的代碼打包成可執行文件,下面介紹如何利用一個腳本文件將 Python 代碼變為 e

6.1 壓縮打包介紹;6.2 gzip壓縮工具;6.3 bzip2壓縮工具;6.4 xz壓縮工具

font family -s 格式 資源 watermark 打包 tar.bz2 微軟雅黑 6.1 壓縮打包介紹常見的壓縮文件類型:Windows : .rar .zip .7zLinux : .zip .gz .bz2 .xz

python專案1:自動解壓並刪除壓縮

目的:實現壓縮包的自動解壓及刪除。 思路:獲取壓縮包 > 解壓 > 刪除壓縮包 程式碼實現:此處程式碼實現前提為.py檔案和壓縮包在同一資料夾 # 匯入需要的包 import os import shutil import time # 定義查詢函式 def scan_file():

工具類-圖片壓縮

import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.ByteArrayInput

java使用google開源工具實現圖片壓縮

前言 作為靠譜的java服務端程式設計師,圖片這個事情一直是個頭疼的事情。 現在很多網站上,都有上傳圖片這個功能,而圖片對於現在的很多手機來說,拍攝出來的都是高清圖片,解析度也是相當的高,當然佔用的儲存空間也就大了。問題也就產生了,你每個使用者都上傳個3M的圖片怎麼辦?

爬蟲開發python工具包介紹 (1

本文來自網易雲社群作者:王濤本文大綱:簡易介紹今天要講解的兩個爬蟲開發的python庫詳細介紹 requests庫及函式中的各個引數詳細介紹 tornado 中的httpcilent的應用總結目標:瞭解python中常用的快速開發爬蟲的工具包。基礎:    python的基礎

使用Python批量對圖片進行壓縮處理

這兩天在對網站伺服器進行遷移的過程中發現歷史積累的圖片附件炒雞多,許多都是未經壓縮直接從相機裡面拷出來上傳的原始解析度尺寸,相當浪費空間,而網站頁面上進行圖片顯示其實只需要寬度能達到700px就夠了,

16深度圖片顯示並儲存

Opencv 16位深度圖片顯示並儲存 專案需要,要將cmos相機的資料讀出來,並顯示出圖片來。同事已經通過FPGA+USB的方式,把相機並行資料轉成序列,我需要做的就是上位機,找到frame valid和line valid有位,讀取一個frame的資料後,顯示出來。 設計思路: 三個th

5 款最好用的圖片無失真壓縮工具

第一:Tinypng 地址:https://tinypng.com/ 這款工具我最常用的,實在是太喜歡了,經常用到,最大限度的做到對畫質無損的進行壓縮,推薦! 這個工具他同時支援對Jpg和Png的壓縮。Tinypng也支援Wordpress和magento的使用。 Wo

深度學習--------圖片深度含義

以前沒接觸深度學習的時候沒注意過圖片位深度的問題,最近研究深度學習圖片輸入弄的也是莫名奇妙,焦頭爛額。記錄一下自己搜的資料的總結。首先要明白計算機的儲存方式位二進位制,只有0和1,因此圖片的畫素矩陣也不例外 這裡可以看到圖片的位深度為16,因此可以表示的顏色為2**16

1python-opencv讀取圖片、顯示圖片和儲存

cv2.waitKey() 是一個鍵盤繫結函式。需要指出的是它的時間尺度是毫秒級。函式等待特定的幾毫秒,看是否有鍵盤輸入。特定的幾毫秒之內,如果按下任意鍵,這個函式會返回按鍵ASCII碼值,程式將會繼續執行。如果沒有鍵盤輸入,返回值為-1,如果我們設定這個函式的引數為 0,那它將會無限期的等待鍵盤輸入。cv

Python指令碼1:批量獲取圖片下載到本地

#  根據圖片連結列表獲取圖片儲存到本地 #coding=utf-8 import urllib.request image_url = [ 'http://i2.bvimg.com/649796/f8

Python爬蟲(1)------爬取網站圖片

初學爬蟲的學習流程 環境 python 3.6 使用 urlib庫進行爬取內容 熟悉爬蟲 首先對百度進行爬取 # -*- coding: utf-8 -*- import urllib.request url = 'http://www

win8.1 64+Anaconda3-5.0.1+cdua9.0+cuDNN v7.0.5+tensorflow 1.8.0 深度學習環境搭建小記

前言: 完全不會深度學習,只是知道有這麼一種數學程式設計技術,和人工智慧有關,很火,上一週在某公眾號灌水的時候, 獲贈送一本<Python 機器學習預測分析核心演算法>,僅此而已。前幾天突然心血來潮,學著安裝深度學習的環境,碰到幾個大坑,安裝和解除安裝An

Python1):簡單影象處理(圖片->二進位制->圖片

#coding=utf-8 ''' 1-將圖片轉化為陣列並存為二進位制檔案 2-從二進位制檔案中讀取數並重新恢復為圖片 ''' from __future__ import print_funct

python圖片等比例壓縮

class ImageCompressUtil(object): # 等比例壓縮 def resizeImg(self, **args): try: args_key = {'ori_img': '', 'dst_im