resim boyutlandırmak için makul PHP memory_limit

6 Cevap php

Ben kendi hesaplarına resim yüklemek için sitemde olanak sağlamak istiyorum. Görüntüler site genelinde gerekli 4 farklı boyutlarda yeniden boyutlandırılabilir olsun.

Armut Image_Transform kullanıyorum ama ben jpgs belirli türleri ölümcül hatalar (2mb altında çalıştı tüm dosyalar) "bayt tükendi" elde etti. Yani Pentium Dual-Core E5200@2.50GHz ve 2GB ram ile özel bir sunucuya taşındı. Aynı hata - aynı görüntü boyutlandırma kodu yüklendi. Ben 64M için php.ini içindeki RAM artırdı ama sitesi jpg belirli türde aynı sorun olsun. Ayrıca WIDEimage sınıf çalıştı - Aynı hata (error imagecreatefromjpeg () ile her zaman). (GD2 kullanma). Bütün yağmurluk lokal çalışıyor.

Bu gerçekten bir hafıza sorunu var mı, benim kurmak + resim boyutlandırma için makul bir memory_limit nedir?

6 Cevap

Eğer ihtiyacınız olacak ne kadar bellek için kaba bir kılavuz bu gibi hesaplanabilir

$imageInfo = getimagesize( $sourceImagePath );

// a check to make sure we have enough memory to hold this image
$requiredMemoryMB = ( $imageInfo[0] * $imageInfo[1] * ($imageInfo['bits'] / 8) * $imageInfo['channels'] * 2.5 ) / 1024;

Bu oldukça kaba ve deneme isteyebilirsiniz geçiştirmek faktörü, 2.5 içerir.

1-2 Mb jpeg için hafıza 90mb tuhaf görünüyor. Ben kodunuzu görmedim, ama belki de her boyutu örneği için dosyayı birden çok kez açıyoruz? Kapatın, sonra X 4 (kaydetmek, yeniden boyutlandırma), bir zamanlar dosyayı açmayı deneyin.

Ben şu anda kullanıcıların resim yüklemek bir site var, ve bir hata içine koşma değil, benim ayarlar PHP ve 2Mb dosya upload limitini 16Mb ve ben kullanmak this library yerine armut

kod örneği

$image
->open('uploaded.jpg')
->resize(500, 500)
->save('large.jpg')
->resize(100, 100)
->save('medium.jpg')
->resize(25, 25)
->save('small.jpg')
->close();

Görüntü boyutu keyfi boyutta olabilir eğer resim boyutlandırma için PHP için yeterli (veya güvenli, çökmesini değil) hafıza limitini ayarlama güvenli bir yolu yoktur.

, Hiçbir PHP bellek kullanılan bu şekilde yerine OS kullanılan bellek olacak - iyi çözüm yüklü ImageMagic yoluyla komut satırı PHP CLI üzerinden boyutlandırma olacaktır.

CLI komutu dönüştürmek bakınız:

http://www.imagemagick.org/script/convert.php

O ini_set ("memory_limit", "256M") görünüyor; Bunu kapalı bulunuyor. Ayrıca, memory_get_peak_usage kullanarak () I (problem jpgs ile) benim resim boyutlandırma bir 1.8MB görüntü için 90MB bölgesinde kullanılarak olduğunu keşfetti.

Ayrıca ilgi http://uk.php.net/manual/en/function.imagecreatefromjpeg.php#64155 dinamik (Ben denemek için henüz) bir bellek sınırı atamak için bir yol olduğunu.

Image_Transform kütüphane Imagemagick ve libjpeg ile kullanılabilir önemli bir boyutlandırma optimizasyon özlüyor. Bunu verimli bu cevap, örnek okumadan önce boyutunu belirterek yüklenirken iken bir JPEG boyutlandırabilirsiniz:

Efficient JPEG Image Resizing in PHP

http://www.dotsamazing.com/en/labs/phpmemorylimit

Here is a nice tool for calculating the memory you will need. It worked perfectly even for my terribly inefficient coding..

Ayrıca daha fazla bellek tahsis nasıl hakkında bazı ipuçları vardır.