我目前正在從命令行運行一個PHP應用程序來優化圖像文件夾。如何避免優化已經使用PHP優化的圖像?
PHP應用程序更像是其他Image Optimizer的包裝,它只是迭代目錄並抓取所有圖像,然後通過適當的程序運行圖像以獲得最佳效果。
下面是我將使用以及每個將用於...
imagemagick
,以確定文件類型和轉換非動畫GIF的爲PNG
gifsicle
優化Gif動畫程序圖像0 jpegtran
優化JPG圖像0 pngcrush
優化PNG圖像0 pngquant
優化PNG圖像PNG8格式
pngout
優化PNG圖像PNG8格式
我的問題:隨着1-10圖像,一切運行平穩,較快不過,有一次我在一個運行更大的文件夾10個或更多的圖像,它變得非常慢。我並沒有看到一個很好的解決方案,但有一點可以幫助您避免重新處理已經優化的圖像。因此,如果我有一個包含100個圖像的文件夾,並優化該文件夾,然後添加5個新圖像,請重新運行優化程序。然後它必須優化105個圖像,我的目標是讓它只優化5個較新的圖像,因爲之前的100個圖像已經被優化。當新圖像添加到圖像文件夾時,這樣做會大大提高性能。
我意識到簡單的解決方案將簡單地複製或移動到一個新的文件夾後處理它們,我的問題與簡單的解決方案是這些圖像用於網站和網站,所以圖像通常很難鏈接到一個網站的源代碼,改變圖像的路徑會使這個複雜化,並有可能打破它。
我的一些想法是:將某種文本文件數據庫寫入圖像文件夾,這些文件夾將列出所有已經處理的圖像,所以當應用程序運行時,它只會運行在不是已經在那個文件中。另一個想法是爲文件名命名以在名稱中具有某種標識以表明它已被優化,第三個想法是在優化後將每個優化文件移動到最終目標文件夾。想法2和3不好,因爲它們會打破網站源代碼中的所有圖像路徑鏈接。
所以,如果你能想到一個體面的/良好的解決方案這個問題,請分享?
這實際上是我的第一個想法,但我相信這隻會用於JPG圖像?大多數我的網站圖片都是png和gif,或者至少在大多數情況下都會轉換爲這些圖片,我認爲其中的一些優化實際上會移除exif數據以節省空間。我不能100%確定我剛纔所說的話,所以我可能會錯,但如果我說得對,那就是爲什麼我不認爲這會起作用。此外,我想避免數據庫,除非它是某種單個文件數據庫列出可以包含在圖像文件夾中的文件 – JasonDavis 2012-02-20 02:25:17
@jason - PNG還具有元數據。我添加了兩個鏈接到答案。 – 2012-02-20 02:39:30
感謝您的跟進,經過更多的研究,我傾向於擁有某種數據庫/文件。優選地,位於圖像文件夾中的文件可以列出已經處理過的圖像,然後僅運行在非優化的圖像上,在運行結束時它將更新該列表文件以包括剛纔的圖像文件處理。我的主要原因是,如果有數百個文件,它將不得不讀取所有這些文件的一部分來獲取exif和元數據,我認爲文件/數據庫可能會更快一些。對這種方法有什麼想法? – JasonDavis 2012-02-20 03:39:38