2016-03-28 36 views
-1

Bu yüzden, birkaç saat boyunca bu işin üzerinde kaldım. Bunun için herhangi bir çözüm bulmaktan yoruldum ama çözüm bulamadı. Yani herhangi bir yardım büyük beğeni topluyor.Görüntüyü bir klasörde saklamadan yeniden boyutlandırma nasıl olur

Benim Sayı: Birden fazla resim yüklemek için formu kullanıyorum

. Verilerin birden fazla sunucuda yedeklenmesi nedeniyle bunları veritabanında saklamak zorundayım. Görüntüleri klasörde saklamak bir çözüm değil. Görüntüyü veritabanına kaydedebileceğimi düşünüyor, ancak yüklenen tüm görüntülerin küçük resmini oluşturmam gerekiyor. Yani bu benim sorunum, bu tmp dosyalarından nasıl küçük resim oluşturabilirim. Çalışmıyor imagecreate kullanmak için yaratıldım, bu minik resmin içeriğini almak ve veritabanına kaydedemiyorum.

Bu, içeriği döndürmeyen görüntüyü yeniden boyutlandırmak için kullandığım bir koddur. Şu anda sadece yüklenen tüm dosyaları görüntüler:

function resize_image($file, $w, $h, $crop=FALSE) { 
    list($width, $height) = getimagesize($file); 
    $r = $width/$height; 
    if ($crop) { 
     if ($width > $height) { 
      $width = abs(ceil($width-($width*abs($r-$w/$h)))); 
     } else { 
      $height = abs(ceil($height-($height*abs($r-$w/$h)))); 
     } 
     $newwidth = $w; 
     $newheight = $h; 
    } else { 
     if ($w/$h > $r) { 
      $newwidth = $h*$r; 
      $newheight = $h; 
     } else { 
      $newheight = $w/$r; 
      $newwidth = $w; 
     } 
    } 
    $src = imagecreatefromjpeg($file); 
    $dst = imagecreatetruecolor($newwidth, $newheight); 
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

    return $dst; 
} 

Bu

formu yayınlanmıştır sonra kullanılan benim kodudur.

for($i=0;$i< count($_FILES['upload_file']['tmp_name']);$i++) 
{ 

     $size = getimagesize($_FILES['upload_file']['tmp_name'][$i]); 
     $name = $_FILES['upload_file']['name'][$i]; 
     $type = $size['mime'];   
     $file_size_bits = $size['bits']; 
     $file_size_width = $size[0]; 
     $file_size_height = $size[1]; 
     $name = $_FILES['upload_file']['name'][$i]; 
     $image_size = $size[3]; 
     $uploadedfile = $_FILES['upload_file']['tmp_name'][$i]; 
     $tmpName = base64_encode(file_get_contents($_FILES['upload_file']['tmp_name'][$i])); 
     $sImage_ = "data:" . $size["mime"] . ";base64," . $tmpName; 
     echo '<p>Preview from the data stored on to the database</p><img src="' . $sImage_ . '" alt="Your Image" />'; 


    } 

Yüklenmekte olan bu dosyaların küçük resimlerini oluşturmam gerekiyor. Bunu nasıl başarırım?

Lütfen bildiriniz.

Yardımlarınız için teşekkürler.

Alkış

+0

Eğer ImageMagick kullanarak denediniz mi? http://www.imagemagick.org/Usage/thumbnails/ – Willcodeforfun

cevap

1

Bu büyük bir sorundur:

return $dst; 

$dst resim verisi değil görüntü verileridir.

Görüntü verisini geri göndermek için imagejpeg() veya imagepng() kullanmalısınız.

Bu işlevler, veri akışını tarayıcıya gönderdiği için, çıktılanan görüntü verilerini tarayıcıya göndermek yerine yakalamak için bazı çıktı arabelleği işlevlerini kullanırız.

Yani,

return $dst; 

ile değiştirin:

ob_start(); 
imagejpeg($dst, NULL, 100); // or imagepng($dst, NULL, 0); 
$final_image = ob_get_contents(); 
ob_end_clean(); 
return $final_image; 
+1

Evet, teşekkürler! Kodu çözümünüzle değiştirdim ve döndürülen değeri kodladı ve bir çekicilik gibi çalıştı! Teşekkürler! – Ash