2016-04-08 24 views
1

ile yüklenen resim dosyasını sıkıştırmak için Resimlerin belirli bir yüzde oranında sıkıştırılabileceğini öğrendim. Örneğin: Bu durumda,php/Laravel - Dosya boyutu

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

, $source_img boyutu orijinal boyutunun% 90 azalacaktır. Orijinal boyut $source_img 100kb ise, $compressed_img'un değeri 90kb olacaktır.

Yapmaya çalıştığım şey, hedef dosyanın orijinal boyutuna göre sıkıştırılıp sıkıştırılmayacağını belirlemek ve bayt tarafından ne kadar boyutunun azaltılacağını belirlemektir. Örneğin

, ne yüklenen tüm dosyalar 200kb altında olmasını sağlamak gerekir ama yüklenen boyutu zaten daha hafif ise boyutunu değiştirmez gerekiyorsa?

İşte bir sözdizimi kodudur.

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

kaynak dosyasının boyutu değişir yana

, compress() işlevini kullanmak pratik olacak değil.

Herhangi bir tavsiye memnuniyetle karşılanacaktır. (Laravel 5.2 ile php kullanıyorum)

cevap

0

Yanlış bir varsayımdan başlıyorum, görüntüyü sıkıştırdığınız zaman bir sıkıştırma faktörü belirtebilirsiniz, ancak çıktının orijinal boyutunun% 90'ı olduğu anlamına gelmez büyük ölçüde resmin içeriğine bağlıdır, bazı görüntüler diğerlerine daha iyi sıkıştırılabilir (tek renkli bir resim normal fotoğraftan daha küçük olabilir).

ne yapabilirim
  • çek görüntüleri bir tasarruf her görüntü için örnek 200k
  • için (tanımladığınız bir eşik boyutundan daha büyükse tüm resimler

    1. döngüsüne söyleyen That Resmin bir sıkıştırılmış dosya olarak sıkıştırılmış sürümü
    2. Özgün resim boyutunu geçici boyutla karşı karşıya getirdiğinizde orijinali koruyabilir veya yeni sıkıştırılmış olanı kullanabilirsiniz:

    JPEG'deki sıkıştırmayı artırmanın, görüntünün kalitesini düşürdüğünü ve sıkıştırma çok yüksekse resimlerinizde düşük çirkin hatalar görmeye başladığınızı unutmayın. Genellikle 85 altında sıkıştırma kullanmıyoruz.

  • +0

    Teşekkürler. cevap. Doğrulama, "tüm görüntüleri döndür" ile, yüklenen görüntülerin tümünü bir forloop (ya da bunun gibi bir şey) içinde yinelemek demek istediniz, böylece resimlerin boyutunu kontrol edebilir miyim? – Hiroki

    +0

    Evet, tam olarak böyle bir şey http://stackoverflow.com/a/3738315/87407 bu biraz zaman alır her bir görüntü için bunu yapmak ve komut satırında ilk kez çalıştırmak için bir komut dosyası oluşturabilirsiniz. Ardından, yüklenen tüm resimleri kontrol etmek için yükleme mantığınızı değiştirin. Ardından, bunlar yüklenecek (veya komut dosyasını düzenli olarak her gece gibi). – wezzy