• 13-02-2010, 21:38:08
    #1
    Eposta Aktivasyonu Gerekmekte
    merhaba arkadaşlar. r10 da bir arkadaşımızın yazdığı resim yükleme kodunu kullanıyorum fakat bu kodda resmin boyutunu saolsun nereden değiştireceğimizi yazmış. fakat o kodu nasıl ayarlayacağım?

          <?php
          if ($_POST["gonder"]=="Yukle"){
          $kaynak=$_FILES["resim"]["tmp_name"]; // Yuklenen dosyanin adi
          $klasor="upload/"; // Hedef klasörumuz
          $yukle=$klasor.basename($_FILES['resim']['name']);
          if (move_uploaded_file($kaynak,$yukle)){
          $dosya="upload/".$_FILES['resim']['name'];
          $resim=imagecreatefromjpeg($dosya); // Yuklenen resimden olusacak yeni bir JPEG resmi olusturuyoruz..
          $boyutlar=getimagesize($dosya); // Resmimizin boyutlarini ögreniyoruz
          $resimorani=300/$boyutlar[0]; // Resmi kuçultme/buyutme oranimizi hesapliyoruz..
          $yeniyukseklik=$resimorani*$boyutlar[1]; // Buldugumuz orandan yeni yuksekligimizi hesapliyoruz..
          $yeniresim=imagecreatetruecolor("300",$yeniyukseklik); // Olusturulan bos resmi istedigimiz boyutlara getiriyoruz..
          imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "300", $yeniyukseklik, $boyutlar[0], $boyutlar[1]);
          // Yuklenen resmimizi istedigimiz boyutlara getiriyoruz ve bos resmin uzerine kopyaliyoruz..
          $hedefdosya="upload/yeniresim-".$_FILES['resim']['name']; // Yeni resimin kaydedilecegi konumu belirtiyoruz..
          imagejpeg($yeniresim,$hedefdosya,100); // Ve resmi istedigimiz konuma kaydediyoruz..
          //Kaydettigimiz yeni resimin yolunu $hedefdosya degiskeni tasimaktadir..
          chmod ($hedefdosya, 0755); // chmod ayarini yapiyoruz dosyamizin..
          ?>
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <title>Resim Upload</title>
          </head>
          <body>
          Resminiz basariyla yuklenmistir..<br />
          <img src="<?php echo $hedefdosya; ?>" alt="Yukelenen Resim" border="0" />
          </body>
          </html>
          <?php
          }
          else echo "Resim Yuklenemedi";
          // Eger resim yuklenemediyse move_uploaded_file fonksiyonundan deger false olacagindan bu hatayi yazdiririz ekrana
          }
          else header ("Location: index.html");
          ?>


    yani yanılmıyorsam

    imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "300", $yeniyukseklik, $boyutlar[0], $boyutlar[1]);

    bu kod resmin boyutunu ayarlıyor. fakat bunu bizim bildiğimiz örneğin 640'a 480 olarak nasıl yapacağız? hangisi height?
    yardımcı olabilirseniz çok mutlu olurum.
    kolay gelsin.
  • 13-02-2010, 21:55:47
    #2
    imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "640", "480", $boyutlar[0], $boyutlar[1])
    Olarak değiştirirseniz 640 x 480 olarak ayarlamış olursunuz
    İyi akşamlar
  • 13-02-2010, 22:43:56
    #3
    Eposta Aktivasyonu Gerekmekte
    merhaba mesut bey. söylediğinizi yaptım, çok teşekkür ederim oldu fakat resmin orjinal boyutu kalıyor. yani aşağıdaki resimde de göstereceğim gibi
    ben resmin boyutunu 71'e 71 yaptım. resim 71'e 71 oldu ama orjinal boyutu ise siyah oldu.




    son olarak ben resim isimlerini random yapmaya uğraştım. google'dan rand değişkenini iyice inceledim. fakat bir türlü beceremedim.
    <?php
    function r_sayi($baslangic,$bitis,$kac_sayi)
    {
         for ($i=0; $i<$kac_sayi+1; $i++)
        {
          $s1=rand($baslangic,$bitis);
          $ayni=0;
          for ($i2=0;$i2<=$i;$i2++)
              {if ($sayilar[$i2]==$s1){$i=$i-1;$ayni=1;}}
               if ($ayni==0) {$sayilar[$i]=$s1;}
        }
    return $sayilar;
    }
    
    ?>
    <?php
    if ($_POST["gonder"]=="Yukle"){
    $kaynak=$_FILES["resim"]["tmp_name"];
    $klasor="avatar/";
    $yukle=$klasor.basename($_FILES['resim']['name']);
    if (move_uploaded_file($kaynak,$yukle)){
    $dosya="avatar/".$_FILES['resim']['name'];
    $resim=imagecreatefromjpeg($dosya);
    $boyutlar=getimagesize($dosya);
    $resimorani=300/$boyutlar[0];
    $yeniyukseklik=$resimorani*$boyutlar[1];
    $yeniresim=imagecreatetruecolor("300",$yeniyukseklik);
    imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "71", "71", $boyutlar[0], $boyutlar[1]);
    $sayilar2=r_sayi(4,15,5);
    foreach($sayilar2 as $bolsayi){
    $hedefdosya="avatar/'$bolsayi'-".$_FILES['resim']['name'];
    }
    imagejpeg($yeniresim,$hedefdosya,100);
    chmod ($hedefdosya, 0755);
    ?>

    $hedefdosya="avatar/'$bolsayi'-".$_FILES['resim']['name'];

    bu kısmı bayağı değiştirmeye çalıştım ama yemedi
    yani resmin ismi önemli değil. 10 rakam.jpg şeklinde olması gerekiyor.
    mesut bey rica etsem bu konularda da yardımcı olabilir misiniz?
  • 14-02-2010, 01:11:06
    #4
    function isim_ver($uzunluk) {
    	$karakterler = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	$karakter_sayi = strlen($karakterler);
    	$isim_ver = "";
    	for ($ras = 0; $ras <$uzunluk; $ras++) {
    		$rakam_ver = rand(0,$karakter_sayi-1);
    		$isim_ver .= $karakterler[$rakam_ver];
    	}
    	return $isim_ver;
    }
    kullanımı

    $yeni_isim = isim_ver(8); // kaç karakterli olmasını istiyorsan parantez içine yaz
  • 14-02-2010, 16:37:07
    #5
    Eposta Aktivasyonu Gerekmekte
    Invictus teşekkür ederim. Sayı olayını tamamladım. Resmin neden o şekilde kesildiğinide ayarlayabilirsem sorunum tamamen bitmiş olacak.
    bu konuda da yardımcı olmanı rica edebilir miyim
    teşekkürler.
  • 14-02-2010, 17:18:12
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php
    imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "71", "71", $boyutlar[0], $boyutlar[1]); 
    ?>
    Arkadaşım burada resmin boyutunu 71*71 olarak veriyorsun, ancak öncesinde
    <?php
    $yeniresim=imagecreatetruecolor("300",$yeniyukseklik); 
    ?>
    kodu ile 300px'e göre boyutlandırıp, bir resim oluşturuyorsun ve birleştiriyorsun. O nedenle resmin o şekilde çıkıyor. Burada $boyutlar[0], ve $boyutlar[1] senin resminin orjinal boyutları, 71 yazdığın yerler ise çevirmek istediğin boyutlar oluyor. Yani bu iki kısımdaki boyutların uyumlu olması gerekir.

    Bunun dışında bir tavsiye vermek gerekirse, resim ismi için sadece 10 harf olması yeterliyse, ayrıca fonksiyon yazmana da gerek yok, hazır fonksiyonları kullanmak çok daha hızlı olur ve gereksiz işlemden korur. En basiti time() ile vs halledebilirsin.

    <?php
    $yeni_isim = time();
    //veya
    $yeni_isim = substr(md5(time()),0,10); //10 yerine kaç hane istiyorsan yazarsın
    ?>
    Ayrıca işlem yapmak için post['gonder'] var mı diye değil, $_FİLE değeri var mı diye kontrol yaparsan daha sağlıklı olur. Çünkü, bu şekilde resim eklenmeden göndere basılsa da bu işlemler yapılır, hata gösterimi kapalıysa hata vermez sadece. Yani

    <?php
    if ($_POST["gonder"]=="Yukle"){ 
    ?>
    yerine:
    <?php
    if(isset($_FILES['resim']) && !empty ($_FILES['resim']['name'])){
    ?>
    şeklinde yapman daha sağlıklıdır.