Php ile resim upload işlemlerinde bazılarımız sıkıntı yaşayabiliyoruz.Buna ufak bir işimi yaparken bende dahil olmuştum.Ve bunla ilgili bir sonuç ararken örnek bir yapı gördüm.Ve geliştirmeye çalıştım.Aslında benim geliştirdiğim fonksiyon tamamen deneme yanılma yöntemiyle bulunmuş bir yöntemdir.Pek sağlıklı ve performanslı gibi gözükmeye bilir ama şuan bir çok işimde kullanıyorum ve açıkçası biraz daha geliştirildikten sonra çok daha iyi olacağına inanıyorum.
Bu örneği bulduğumda işleyişi şu şekildeydi.Eklenen bir resmi ilk önce boyutlandırıyor sonra bu boyutlanan resmi belirlenen klasöre ekleyerek ilk seçilen resmi siliyordu.
Bende aynı işlevi farklı değişken adlarıyla yaptım.Aslında kullanılan yöntem çok basit bunun bir örneğini php.net’te görebilirsiniz.Öncelikle formdan gönderilen dosya adını ve kaynağını çekiyoruz.Ve bu veriyi şifreleyerek “basename” işleminden geçiriyoruz.
$kaynak = $_FILES["resimler"]["tmp_name"]; //Formdan gonderilen veriyi cekiyoruz $klasor = "../image/"; //Yuklenecek dosya yolunu bir degiskene aktariyoruz $dosya_adi = $_FILES['resimler']['name']; //Ayni sekilde dosya adinide cekiyoruz $name = md5(uniqid($dosya_adi)); $uzanti = substr($dosya_adi,-4); $yeniad = $name.$uzanti; /*Gelen dosya adini ilk önce md5 ile sifreleyip substr ile uzantisini aliyoruz*/ $yukle = $klasor . basename($yeniad); /*son olarak basename kullanarak dosya yolunun dosya isim bilesenini donduruyoruz */
Buradaki işimiz bittikten sonra yapacağımız işlem şu olacaktır öncelikle “if” ile bir kontrol yapısı oluşturup “move_uploaded_file” ile belirteceğimiz konuma gelen resmi ekliyoruz.
if (move_uploaded_file($kaynak, $yukle)) { $resim2 = imagecreatefromjpeg("../image/".$yeniad); /*resim2 adlı degiskenimizde kullandıgımız imagecreatefromjpeg fonksiyonu gelen bir jpeg dosyasindan yeni bir resim olusturmamizi saglar*/ $boyutlar2 = getimagesize("../image/".$yeniad); /*degisken ve fonksiyon adından da anlayabilecegimiz gibi gelen resmin boyutlarını döndürüyoruz*/ $resimorani2 = 900 / $boyutlar2[0];, /*gelen resmi 900px genisligine ceviyoruz */ $yeniyukseklik2 = $resimorani2 * $boyutlar2[1]; $yeniresim2 = imagecreatetruecolor("900", $yeniyukseklik2); /* burada imagecreatetruecolor fonksiyonu ile yeni gerçek renkli bir resim oluşturuyoruz */ imagecopyresampled($yeniresim2, $resim2, 0, 0, 0, 0, "900", $yeniyukseklik2, $boyutlar2[0], $boyutlar2[1]); /* imagecopyresampled fonksiyonu ile resmi boyutlandırıp yeni bir kopyasını oluşturuyoruz */ $hedefdosya2 = "../image/" .$yeniad; imagejpeg($yeniresim2, $hedefdosya2, 100); /* imagejpeg fonksiyonu ile yeniresim2 degişkenimizdeki gelen resimi hedefdosya2 adlı degiskenimizdeki dosya yoluna kaydını gerceklestiriyoruz*/ chmod($hedefdosya2, 0755); /* son olarak hedefdosyamızın chmod ayarını 0755 olarak ayarlayıp resmimizin buyuk halini ekliyoruz */
Son olarak aynı işlemi birde küçük resmi halinde ekleyecek halini yazıp “if” yapımızın içine ekleyerek “if” yapımızı sonlandırıyoruz.Yalnız belirtmek isterim.Kendimizi tekrarlamamamız lazım.Yani burada bir çok tekrar yaptım.Aynı fonksiyonu daha geliştirip az kod çok iş mantığı ile ilerletip tekrar sunumunu yapacağım.Umarım işinize yarar.Ayrıca fonksiyonlar hakkında daha ayrıntılı bilgiye aşağıdaki linklerden ulaşabilirsiniz.Bir daha ki paylaşımda görüşmek üzere kolay gelsin.
$resim = imagecreatefromjpeg("../image/".$yeniad); $boyutlar = getimagesize("../image/".$yeniad); $resimorani = 55 / $boyutlar[0]; $yeniyukseklik = $resimorani * $boyutlar[1]; $yeniresim = imagecreatetruecolor("55", $yeniyukseklik); imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "55", $yeniyukseklik, $boyutlar[0], $boyutlar[1]); $smallYeniAd = "small".$yeniad; $hedefdosya = "../image/thumb/".$smallYeniAd; imagejpeg($yeniresim, $hedefdosya, 100); chmod($hedefdosya, 0755); }
Kaynak Link 1 : imagecreatefromjpeg
Kaynak Link 2 : imagecreatetruecolor
Kaynak Link 3 : imagecopyresampled
Harika anlatım. teşekkürler
Eski bir yazı olmasına rağmen bu güzel yorumunuz için ben teşekkür ederim.