2010-01-03 70 views
11

前段時間,我使用了一個名爲(我認爲)的PNG優化服務「抹黑它」。你給它一個網絡鏈接,它返回一個所有的PNG圖像與他們的文件很好,壓縮,壓制...PNG優化工具

我想實現一個類似的優化功能,作爲我的網站的圖像上傳過程的一部分;有沒有人知道我可以利用這個預先存在的庫(PHP或Python優先)? Google簡要介紹了幾種命令行風格的工具,但如果可能的話,我寧願不要沿着這條路線走。

+2

,我不認爲任何流行的工具(使用OptiPNG ,pngcrush等人c)有綁定。 ImageMagick(用於PHP)和PIL(用於Python)將通過調整輸出設置來幫助您,但命令行工具更加優化。 – 2010-01-03 02:08:03

回答

14

用PHP執行這個命令行工具

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB -brute -l 9 -max -reduce -m 0 -q IMAGE 
    optipng -o7 -q pngout.png 
    pngout pngout.png -q -y -k0 -s0 
    advpng -z -4 pngout.png > /dev/null 
+1

嘿,它已經6年了,但我注意到你在線 - 所以這些都是一個不錯的工具列表。你能列出所有的壓縮工具爲PNG/JPG和類似?我只需要你使用/喜歡的名稱列表,因爲這些工具很好,我懷疑你可能在6年內找到了更好的東西:)在此先感謝。很好的回覆。 – S00 2016-03-04 23:39:07

3

只要你的PHP與GD2支持(現在很常見的)編譯:

<?php 
$image = imagecreatefromstring(file_get_contents('/path/to/image.original.png')); 
imagepng($image, '/path/to/image.smushed.png', 9); 

這將在任何圖像格式GD2理解(不只是PNG)讀取和輸出gzip作爲最大壓縮PNG而不犧牲質量。

雖然今天它的使用可能比幾年前少,大多數圖像編輯器已經這樣做了,因爲gzip並不像以前那樣花費CPU多。

+0

謝謝,但我追求的不僅僅是gzipping,即去除顏色校正和gamma信息。 – Mathew 2010-01-03 02:16:31

+0

儘管我同意除簡單壓縮之外還有其他優化技術,但您所要求的並不是_optimizing_,而是_destroying_上傳的圖像。 – Mike 2010-01-03 02:20:20

+0

Bah!語義! :)儘管如此,我的要求並不是以任何方式破壞圖像,而是通過摧毀某些(不必要的)信息來優化圖像。 – Mathew 2010-01-03 02:32:11

2

您是否聽說過PNGCrush?你可以看看源代碼,PNG and MNG Tools at SourceForge的一部分,然後用Python進行轉錄或包裝。

+1

PNGcrush比任何純Python解決方案都要快,在Python中調用外部程序很容易。最明顯的缺點是如果你的操作系統產生新流程的成本非常高,視窗。 – Theran 2010-01-03 06:25:54

+0

我懷疑爲每個文件上傳產生一個新的進程是一個好主意,不管你的操作系統如何。 – Eric 2010-01-04 16:39:27

2

我會質疑扔掉其他塊(如GAMA和政府間委員會)的智慧,但如果這是你想要做的是相當容易使用PyPNG去除大塊內容:

#!/usr/bin/env python 
import png 
import sys 

input=sys.stdin 
out=sys.stdout 

def critical_chunks(chunks): 
    for type,data in chunks: 
     if type[0].isupper(): 
      yield type,data 

chunks = png.Reader(file=input).chunks() 
png.write_chunks(out, critical_chunks(chunks)) 

的critical_chunks功能基本上過濾掉除關鍵PNG塊外的所有關鍵字(關鍵塊的4個字母類型以大寫字母開頭)。

+0

這並沒有改變zlib壓縮,因爲它通過未改變的塊傳遞。 – 2010-01-04 16:31:06