2010-01-01 21 views
3

我有一個網站,用戶可以上傳圖片。我直接處理這些圖像,並使用CodeIgniter圖像處理類將它們重新調整爲5種附加格式。我這樣做是非常有效如下:如何在CodeIgniter中壓縮圖像,但不改變它們的尺寸?

  • 我總是從以前的格式調整,而不是從原來的
  • 我調整使用的90%的圖像質量,其中約一半的JPEG文件的文件大小

上述的方式做事情後,我實施了建議後,我從另一個問題得到我問。我的測試用例是RGB模式下的1.6MB JPEG格式,分辨率高達3872 x 2592.對於這種圖像,這是一種臨界情況,調整大小過程總共花費約2秒,這對我來說是可以接受的。

現在,只剩下一個挑戰了。我希望使用90%的質量壓縮原始文件,但不調整其大小。這個想法是,該文件也將採取一半的文件大小。我想我可以簡單地將其調整爲目前的尺寸,但對文件或其大小沒有任何影響。這是我的代碼,有點簡化:

$sourceimage = "test.jpg"; 
$resize_settings['image_library'] = 'gd2'; 
$resize_settings['source_image'] = $sourceimage; 
$resize_settings['maintain_ratio'] = false; 
$resize_settings['quality'] = '90%'; 
$this->load->library('image_lib', $resize_settings); 

$resize_settings['width'] = $imagefile['width']; 
$resize_settings['height'] = $imagefile['height']; 
$resize_settings['new_image'] = $filename; 
$this->image_lib->initialize($resize_settings); 
$this->image_lib->resize(); 

上述代碼適用於除原始格式以外的所有格式。我嘗試調試到CI類,看看爲什麼沒有發生,我注意到腳本檢測到維度沒有改變。接下來,它只是製作該文件的副本而不進行處理。我評論了一段代碼來強制它調整大小,但現在仍然沒有任何反應。

有沒有人知道如何在不改變尺寸的情況下使用CI類壓縮圖像(任何圖像,而不僅僅是jpegs)到90%?

回答

2

我想你可以做這樣的事情:

$original_size = getimagesize('/path/to/original.jpg'); 

,然後設置下列選項是這樣的:

$resize_settings['width'] = $original_size[0]; 
$resize_settings['height'] = $original_size[1]; 

好了,這樣就不會因CI工作試圖變得聰明,我看到它的方式你有三種可能的選擇:

  • 將圖像旋轉360度由
  • 水印圖像(1x1透明圖片)
  • 自己動手

的DIY方法是非常簡單的,我知道你不希望使用「自定義」功能,但看看:

ImageJPEG(ImageCreateFromString(file_get_contents('/path/to/original.jpg')), '/where/to/save/optimized.jpg', 90); 

正如你所看到的,它比使用CI更簡單。


PS:該段以上可以打開任何類型的圖像(GIF,PNG和JPEG)的,它總是保存圖像爲JPEG質量的90%,我相信這是你想要什麼存檔。

+0

謝謝你的回覆。那麼,那實際上是我已經在做的。$ imagefile數組保存了我用來配置resize類的原始寬度和高度。 – Ferdy 2010-01-01 22:56:06

+1

哦,對不起。直到最後,我沒有看到你的問題。幾分鐘後檢查我的編輯。 – 2010-01-01 22:58:56

+0

沒問題,謝謝你再次幫忙。好的,我做了一些測試。 GD2不支持旋轉,至少這是CI給出的錯誤。我可以通過切換到imagemagick進行旋轉,但這會增加文件大小而不是減小文件大小。我可以看到你的代碼如何易於使用,並且我沒有問題,因此我需要一些適用於GIF和PNG的東西。 – Ferdy 2010-01-01 23:42:18

相關問題