2016-04-08 238 views
1

我發現圖像可以壓縮一定比例。例如:php/Laravel - 如何通過文件大小壓縮上傳的圖像文件

$compressed_img = compress($source_img, $destination_img, 90); 

在這種情況下,$source_img尺寸將減小到原始尺寸的90%。 如果原始大小爲$source_img 100kb,那麼$compressed_img將爲90kb。

我一直在試圖做的是確定目標文件是否基於原始大小進行壓縮,並確定將按字節減少多少大小。

例如,如果你需要確保所有上傳的文件都在200KB如果上傳的尺寸已經比更輕你不能改變大小?

這裏是一個僞代碼。

if($source > 200kb){ 
    $compressed = compressByByte($source, 200kb); 
}//Again, this is a sude code! 

由於源文件的大小而變化,它不會是實際使用compress()功能。

任何意見將不勝感激。 (我使用Laravel 5.2的PHP)

回答

0

我認爲你從錯誤的假設開始,當你壓縮圖像時,你可以指定一個壓縮因子,但這並不意味着輸出是原始大小的90%它很大程度上取決於圖像的內容,有些圖像可以更好地壓縮其他圖像(單色圖像可以比普通照片小)。

這就是說你可以做的是

  1. 週期的所有圖像
  2. 檢查,如果圖像是比您定義的(例如200K
  3. 每個圖像保存閾值大小大壓縮版本的圖像作爲臨時文件
  4. 面對與臨時大小的原始圖像大小,您可以選擇保持原來的一個或使用新的壓縮的。

請記住,增加JPEG中的壓縮率會降低圖像的質量,並且如果壓縮率太高,您開始在圖像中看到較低的醜陋錯誤,通常我們不使用85以下的壓縮。

+0

感謝您的支持回覆。只需確認一下,通過「循環所有圖像」,你是否意味着在forloop(或類似的東西)中迭代所有上傳的圖像,以便我可以檢查圖像的大小? – Hiroki

+0

是的,就像這個http://stackoverflow.com/a/3738315/87407這將需要一些時間,你可以創建一個腳本,爲每個圖像做到這一點,並在第一次在命令行上運行它。然後修改上傳邏輯以檢查上傳的所有圖片,然後將其上傳(或者只是定期運行腳本,如每晚) – wezzy