PHP Thumbnail (küçük resim) oluşturma scripti

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

Facebook Yorumları

8 Yorum

  1. Okan

    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ı.

  2. Ömer Çıtak

    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.

  3. Okan

    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ı ?

  4. aşkın

    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.

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir