Yine oldukça basit ve kullanışlı bir scriptten bahsedeceğim. GD kütüphanesi kullanan scriptimiz, get methodu ile gönderilen parametreler doğrultusunda küçük resimler (thumbnail) oluşturmaya yarıyor.
Kullanılabilir parametreler:
img = resim (path/img.jpg veya http://site.com/img.jpg)
w = Genişlik
h = Yükseklik
yuzde (opsiyonel) = Şayet tanımlanırsa (ör: percent=1) resim yükselik ve genişlik değerleri yüzde olarak değiştirilir (%50 gibi)
oran (opsiyonel) = Şayet tanımlanırsa (ör: oran=1) resim orantılı olarak küçültülür, aksi halde get ile gönderilen ölçüler baz alınır.
Dosyayı thumb.php gibi bir isimle kaydederseniz, kullanım biçimi aşağıdaki gibi olacaktır:
thumb.php?img=resim.jpg&w=150&h=150&oran=1&percent=1
PHP kodları:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <?php header ("Content-type: image/jpeg"); $img = $_GET['img']; $yuzde = $_GET['yuzde']; $oran = $_GET['oran']; $w = $_GET['w']; $h = $_GET['h']; // get image size of img $x = @getimagesize($img); // image width $sw = $x[0]; // image height $sh = $x[1]; if ($yuzde > 0) { // calculate resized height and width if percent is defined $yuzde = $yuzde * 0.01; $w = $sw * $yuzde; $h = $sh * $yuzde; } else { if (isset ($w) AND !isset ($h)) { // autocompute height if only width is set $h = (100 / ($sw / $w)) * .01; $h = @round ($sh * $h); } elseif (isset ($h) AND !isset ($w)) { // autocompute width if only height is set $w = (100 / ($sh / $h)) * .01; $w = @round ($sw * $w); } elseif (isset ($h) AND isset ($w) AND isset ($oran)) { // get the smaller resulting image dimension if both height // and width are set and $oran is also set $hx = (100 / ($sw / $w)) * .01; $hx = @round ($sh * $hx); $wx = (100 / ($sh / $h)) * .01; $wx = @round ($sw * $wx); if ($hx < $h) { $h = (100 / ($sw / $w)) * .01; $h = @round ($sh * $h); } else { $w = (100 / ($sh / $h)) * .01; $w = @round ($sw * $w); } } } $im = @ImageCreateFromJPEG ($img) or // Read JPEG Image $im = @ImageCreateFromPNG ($img) or // or PNG Image $im = @ImageCreateFromGIF ($img) or // or GIF Image $im = false; // If image is not JPEG, PNG, or GIF if (!$im) { // We get errors from PHP's ImageCreate functions... // So let's echo back the contents of the actual image. readfile ($img); } else { // Create the resized image destination $thumb = @ImageCreateTrueColor ($w, $h); // Copy from image source, resize it, and paste to image destination @ImageCopyResampled ($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh); // Output resized image @ImageJPEG ($thumb); } ?> |
Scriptin çalışan örneği:
Demo
Bunun bandwidth bir etkisi oluyor mu yani normalde klaslar ile bir resmi 4 kere bölüp mysqlden çekmek ile bunun arasında fark nedir açıklayabilir misiniz. Bu sınıfımı kullanmak mı daha iyi yoksa resimleri belli oranda küçültüp onları mı göstermek daha mantıklı.
Merhaba Resimlerin boyutu büyük olunca işe yaramıyor resmi göstermiyor acaba neden?
Bu sistemi çok kullanan biriydim fakat devasa bir açık mevcut. Örneğin thumb.php?img=resim.jpg şeklinde resimi çekiyoruz ya, dosya çekilen dosyanın resim olup olmadığını kontrol etmiyor. Örneğin sitenizin veritabanı bağlantı dosyası sql.php ise thumb.php?img=sql.php yazdığımız zaman sql.php içeriği direk size veriyor. çıkan resmi indirip notepad++ ile açın, kod tamamen php oalrak karşınızda. Ve bunu gibi düşünülerek birçok şey türetilebilir. Bu dosyaya ufak bir resimleri ayırt eden kodcuk yazmak şart.
Kesinlikle haklısın Ömer.
peki buna benzer bir scripti kullanmakmı daha mantıklı yoksa yukarı dada dediğim gibi resimleri belli oranda küçültüp sql kaydedip oradan mı? çekmek daha mantıklı ?
Hayır Ömer’in dediği gibi ufak bir güvenlik yaması yapmak gerekli.
Merhaba scriptin açıkları varsa bir iki ortak çalışma ile bunları kapatabiliriz if döngüsüne sokarak gelen değeri kontrol ettirip sadece jpg yada png yada gif diye ayırt edebilmek ve bundan sonra işlemi yaptırmak mümkün eğer script açıklarını ortaklaşa bulup düzenleyelim diyerek bir proje oluşturulursa mail adresimden yada chat.gen.tr adresinden online olarak bana ulaşabilirsiniz. Not: Kendi sitemdir.
Sevgiler saygılar.
merhaba çok teşekkür ederim beni büyük bir dertten kurtardın :)