Nasıl CodeIgniter'daki görüntüleri sıkıştırmak için, henüz boyutlarını değiştirmek değil mi?

1 Cevap php

Ben kullanıcıların görüntüleri yükleyebilirsiniz bir site var. Ben doğrudan bu görüntüleri işlemek ve CodeIgniter Görüntü İşleme sınıfını kullanarak 5 ek biçimleri içine küçültüyoruz. Ben oldukça verimli olarak izleyin bunu:

  • Ben her zaman bir önceki biçiminden yeniden boyutlandırma, yerine orijinal
  • Ben yaklaşık JPEG dosya boyutunu yarıya% 90 oranında bir görüntü kalitesi kullanarak yeniden boyutlandırmak

Ben uygulanan şeyler yapmanın yolu yukarıdaki tavsiye sonra ben sorulan bir başka soru aldım. Benim test case 3872 x 2592 yüksek çözünürlüklü RGB modunda bir 1.6MB JPEG olduğunu. Tür sınırda böyle olduğunu görüntü, için, toplam boyutlandırma süreç benim için kabul edilebilir yaklaşık 2 saniye sürer.

Şimdi, sadece tek bir sorun olmaya devam etmektedir. Ben orijinal dosya o% 90 kalitesi kullanılarak sıkıştırılmış olmak istiyorum ama bunu yeniden boyutlandırma olmadan. Fikir bu dosya çok yarım dosya boyutunu alacağını varlık. Ben sadece onun 'şimdiki boyutlarıyla yeniden boyutlandırmak düşündüm, ama bu dosya veya büyüklüğü için bir şey yapmak için görünmüyor. İşte benim kod, biraz basitleştirilmiş bulunuyor:

$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();

Yukarıdaki kod orijinal dışındaki tüm formatları için çalışıyor. Ben hiçbir şey olmuyor neden görmek için CI sınıfa ayıklama denedim ve ben komut dosyası boyutları değişiklik olmadığını tespit ettim. Sonraki, sadece tüm bu işlem olmadan bu dosyanın bir kopyasını yapar. Ben kod parçasıdır yeniden boyutlandırmak için zorlamak için yorumladı ama şimdi yine bir şey olmuyor.

Herkes boyutlarını değiştirmeden CI sınıfını kullanarak% 90 bir görüntü (herhangi bir görüntü, sadece JPEG) sıkıştırmak için nasıl biliyor mu?

1 Cevap

Ben böyle bir şey yapabileceğini tahmin:

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

Ve sonra bu gibi aşağıdaki seçenekleri ayarlayın:

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

Tamam, böylece nedeniyle CI akıllı olmaya çalışıyor çalışmıyor, onu gördüğünüz yolu olası üç seçenek var:

  • 360 º tarafından Resmi döndürmek
  • (1x1 Şeffaf Görüntü ile) resim filigran
  • Do It Yourself

DIY yaklaşım size "özel" işlevlerini kullanabilirsiniz ama bakmak istemiyorum biliyorum, gerçekten çok basit:

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

Gördüğünüz gibi, bu CI kullanarak daha da basittir.


PS: The snippet above can open any type of image (GIF, PNG and JPEG) and it always saves the image as JPEG with 90% of quality, I believe this is what you're trying to archive.