2012-06-03 18 views
7

Yaklaşık 1500 JPEG görüntüye sahip bir sitem var ve hepsini sıkıştırmak istiyorum. Dizinlerden geçmek sorun değil, sunucuda zaten var olan bir JPEG'i (yeni bir tane yüklemek istemiyorum) sıkıştıran ve eski olanı değiştiren bir işlev bulamıyorum.Sunucuda jpeg'i PHP ile sıkıştır.

PHP'nin bunun için yerleşik bir işlevi var mı? Değilse, JPEG'i klasörden komut dosyasına nasıl okurum?

Teşekkürler.

+2

Tam olarak "sıkıştır" ile ne demek istiyorsun? Her dosyayı daha düşük bir kalitede açıp tekrar kaydetmeyi kastediyorsanız, hangi aracın kullanılacağına * dikkat edin *. PHP'nin yerleşik GD kütüphanesinin dosya boyutuna göre kalitesi tam olarak iyi değil. Ne yapmaya çalıştığınız hakkında biraz daha içerik ekleyebilir misiniz? –

cevap

14

Eğer GD kullanıyorsanız eğer söylemediğin, bu yüzden bu varsayalım.

$img = imagecreatefromjpeg("myimage.jpg"); // load the image-to-be-saved 

// 50 is quality; change from 0 (worst quality,smaller file) - 100 (best quality) 
imagejpeg($img,"myimage_new.jpg",50); 

unlink("myimage.jpg"); // remove the old image 
+0

, kaynağın hayalini kurgulayan bir parametredir, yani bir dosyaya yol açabilir miyim? – Meir

+0

evet, hem görsel, hem de görüntü için bir yol gösterebilir ve bağlantıyı kaldırabilirsiniz. –

+0

Çok teşekkür ederim. – Meir

19

Ben IMagick uzantısını kullanmayı tercih bakabilirsiniz. GD özellikle daha büyük dosyalar için çok fazla bellek kullanır. Burada PHP kılavuzunda Charles Hall tarafından bir kod parçacığı var:

$img = new Imagick(); 
$img->readImage($src); 
$img->setImageCompression(Imagick::COMPRESSION_JPEG); 
$img->setImageCompressionQuality(90); 
$img->stripImage(); 
$img->writeImage($dest); 
$img->clean(); 
+0

Bunu daha önce hiç duymadım ...: S Teşekkürler, ben de ona bir bakacağım :) – Neograph734

+2

'$ img-> clean()' yi çağırmayı unutma, aksi takdirde sızarsın kaynaklar. – Eran

+0

@ Eran, Sabit, teşekkür ederim! –

0

Vlzvl tarafından sağlanan çözüm iyi çalışır. Ancak, bu çözümü kullanarak, kod sırasını değiştirerek bir resmin üzerine yazabilirsiniz.

$image = imagecreatefromjpeg("image.jpg"); 
    unlink("image.jpg"); 
    imagejpeg($image,"image.jpg",50); 

Bu önceden varolan görüntü sıkıştırmak ve aynı dosya adıyla aynı konumda saklama olanağı sağlar.

+0

Resimjpeg() ', aynı dosya adını kullanırken varsayılan olarak orijinal resmin üzerine yazmıyor mu? – Matt

İlgili konular