Swift指令碼(二):無失真壓縮專案中的png檔案
本文將一步一步實現一個Swift指令碼,用來自動壓縮專案中的png檔案;
一、安裝ImageOptim
ImageOptim是用來壓縮png的應用程式;
1、開啟ImageOptim,裡面有個下載按鈕,下載到本地;
2、解壓ImageOptim.tbz2下載下來的檔案,得到ImageOptim;
3、將ImageOptim放到“應用程式”中;
4、測試ImageOptim:開啟ImageOptim,將一張png圖片拖入ImageOptim中,ImageOptim將在原圖上自動壓縮;
二、安裝ImageOptim-CLI命令列工具
通過ImageOptim-CLI,ImageOptim能在命令列中被開啟,我們的指令碼也正是藉助於ImageOptim-CLI來操呼叫ImageOptim的;
安裝步驟:
1、瀏覽器開啟https://codeload.github.com/JamieMason/ImageOptim-CLI/zip/1.14.8 , 下載ImageOptim-CLI
2、解壓ImageOptim-CLI-1.14.8.zip
3、將imageoptim-cli/bin新增到$PATH中
比如,您下載的目錄如下:/Users/breeze/Downloads/ImageOptim-CLI-1.14.8/bin,則在~/bash_profile檔案中,新增如下配置:
export PATH=$PATH:~/Downloads/ImageOptim-CLI-1.14.8/bin
4、測試ImageOptim-CLI:
$ imageOptim --version
1.14.8
此時說明ImageOptim-CLI安裝成功!
三、編寫Swift指令碼
1、編寫指令碼CompressPicture.swift
#!/usr/bin/env xcrun swift
import Foundation
// 判斷是否為資料夾
func isDirectory(atPath: String) -> Bool {
var isDirectory: ObjCBool = ObjCBool(false)
FileManager.default.fileExists(atPath: atPath, isDirectory: &isDirectory)
return isDirectory.boolValue
}
// Swift3.0用CommandLine獲取使用者輸入命令
// argc是引數個數
guard CommandLine.argc == 2 else {
print("Argument cout error: it need a file path for argument!")
exit(0)
}
// arguments是引數
let argv = CommandLine.arguments
let filePath = argv[1]
let fileManager = FileManager.default
var isDirectory: ObjCBool = ObjCBool(false)
guard fileManager.fileExists(atPath: filePath, isDirectory: &isDirectory) else {
print("The '\(filePath)' file path is not exit!")
exit(0)
}
guard fileManager.isReadableFile(atPath: filePath) else {
print("The '\(filePath)' file path is not readable!")
exit(0)
}
let enumerator: FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: filePath)!
var pngList: [String] = []
while let element = enumerator.nextObject() as? String {
let absoluteFilePath = filePath + "/" + element
guard fileManager.isReadableFile(atPath: absoluteFilePath) else {
continue
}
if absoluteFilePath.hasSuffix(".png") {
print("Compress \(absoluteFilePath):")
var shell = "echo " + absoluteFilePath + " | imageoptim"
let process = Process()
process.launchPath = "/bin/bash"
process.arguments = ["-c", shell]
process.launch()
process.waitUntilExit() // 等到執行完才進入下一個迴圈
}
}
2、更改指令碼的可執行為可執行:
$ chmod +x CompressPicture.swift
3、執行指令碼
$ ./CompressPicture.swift Your/Project/Path
執行時,在終端中將看到類似的壓縮過程:
Running ImageOptim...
TOTAL was: 10.565kb now: 5.767kb saving: 4.798kb (45.00%)
Compress /Users/breeze/dev/ShouldWinCopy//GoldenCreditease/GoldenCreditease/Images.xcassets/fund/fund_list_buy_more.imageset/icon01-2.png:
Running ImageOptim...
TOTAL was: 7.207kb now: 3.629kb saving: 3.578kb (49.00%)
Compress /Users/breeze/dev/ShouldWinCopy//GoldenCreditease/GoldenCreditease/Images.xcassets/fund/fund_list_buy_more.imageset/icon01.png:
Running ImageOptim...
TOTAL was: 7.207kb now: 3.629kb saving: 3.578kb (49.00%)
Compress /Users/breeze/dev/ShouldWinCopy//GoldenCreditease/GoldenCreditease/Images.xcassets/fund/fund_myFund_header_background.imageset/我的基金背景-1.png:
相關文章
- 壓縮檔案格式rar和zip有什麼區別 zip和rar哪個是無失真壓縮
- Linux中檔案的壓縮和解壓縮Linux
- 檔案壓縮和解壓縮
- Lepton 無失真壓縮原理及效能分析
- 用迴圈神經網路進行檔案無失真壓縮:史丹佛大學提出DeepZip神經網路
- FTP自動下載並解壓縮檔案指令碼FTP指令碼
- aix 檔案的壓縮與解壓縮AI
- Linux中檔案的壓縮與解壓縮(轉貼)Linux
- java中 檔案壓縮處理Java
- java中檔案如何加密壓縮?Java加密
- 破解壓縮檔案密碼rarcrack密碼
- gulp壓縮檔案
- Java檔案壓縮Java
- java 檔案壓縮Java
- .NET 壓縮/解壓檔案
- 電腦怎麼壓縮檔案 檔案壓縮方法詳解
- linux下的檔案的壓縮和解壓縮Linux
- 【Go】使用壓縮檔案優化io (二)Go優化
- Linux 檔案的壓縮Linux
- .Z 檔案的解壓縮
- 如何利用 gulp 壓縮混淆 “上古”時期的專案檔案
- Shell指令碼-壓縮指定目錄下前一天檔案指令碼
- Mac壓縮檔案怎麼加密?BetterZip加密Word壓縮檔案教程Mac加密
- Ubuntu 壓縮檔案命令Ubuntu
- c#壓縮檔案C#
- Linux 檔案壓縮Linux
- HTTP 之 檔案壓縮HTTP
- WindowsApi 解壓縮檔案WindowsAPI
- 使用gzip壓縮檔案
- cpio檔案解壓縮
- iOS JPG圖片檔案壓縮中的坑iOS
- 將bmp檔案壓縮為jpg檔案
- requireJS對檔案合併與壓縮(二)UIJS
- 檔案的壓縮與解壓縮zz--linuxLinux
- excel檔案裡的圖片怎麼壓縮?excel檔案裡圖片的壓縮方法Excel
- Linux中Bin檔案壓縮包解壓執行Linux
- linux檔案壓縮和解壓命令Linux
- 常見檔案解壓和壓縮