Nasıl yükleyebilirsiniz / bir dijital kamera ile çekilen görüntüleri yeniden boyutlandırmak?

3 Cevap php

Ben bir galeri bir binanın üzerinde çalışıyorum ve hedef giriş düşük engeldir. Görüntü başına 400 KB - Benim kullanıcı dosya boyutu 200 arasında olacağını bu yüzden dijital kamerayı kullanarak fotoğraf çeker kişidir.

Ben GD kütüphanesini kullanarak çalıştırıyorum sorun olduğunu her görüntü sunucu 64 MB sınırı vardır ne zaman resized ve yüklenen kullanımını bellek 90MB yaklaşık + ne zaman.

Ben ImageMagick bu kez kullanmak ve bir iç sunucu hatası atar.

Herkes / yükleme gibi büyük görüntü boyutlarını yeniden boyutlandırma ve bana bazı işaretçiler verebilir ile herhangi bir deneyimi olup olmadığını merak ediyorum.

Thanks,
Levi

edit: İşte upload benim kodu

	 /** Begin Multiple Image Upload**/     
	    $numberImages = count($_FILES['galFile']['name'])-1;

for($i=1;$i<=$numberImages;$i++)
{
$imageName = $_FILES['galFile']['name'][$i];
			$imageType = $_FILES['galFile']['type'][$i];
			$imageSize = $_FILES['galFile']['size'][$i];
			$imageTemp = $_FILES['galFile']['tmp_name'][$i];
			$imageError = $_FILES['galFile']['error'][$i];

			//Make sure it is an image
			if(in_array(end(explode(".", $imageName)), $allowed))
			{
				 //Where to upload image to
				 $uploadFile = $uploadDir . $imageName;
				 if (file_exists($uploadFile))
		{
			//What to do if file already exists
			//Append random number to the end
			$front = explode(".", $imageName);
			$randomNum = rand(1,100);
			$front[0] = $front[0].$randomNum;
			$imageName = $front[0].".".$front[1];
			$uploadFile = $uploadDir . $imageName;
		}
			      if(move_uploaded_file($imageTemp,$uploadFile))
			      {
			      //Add $imageName to DB
			       $query = "INSERT INTO galleryImages VALUES(\"0\",\"$lastInsert\",\"$imageName\",\"$i\")";
	           mysql_query($query);
	           reSizePic($uploadFile);
			      }
			}
}

İşte yeniden boyutlandırmak için kullanarak olmuştu GD kodu:

function reSizePic($image)
{
$source_pic = $image;
$destination_pic = $image;
$max_width = 660;
$max_height = 500;

$src = imagecreatefromjpeg($source_pic);
list($width,$height)=getimagesize($source_pic);

$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;

if(($width <= $max_width) && ($height <= $max_height))
{
    $tn_width = $width;
    $tn_height = $height;
}
elseif (($x_ratio * $height) < $max_height)
{
    $tn_height = ceil($x_ratio * $height);
    $tn_width = $max_width;
}
else
{
    $tn_width = ceil($y_ratio * $width);
    $tn_height = $max_height;
}

$tmp = imagecreatetruecolor($tn_width,$tn_height);

imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);

imagejpeg($tmp,$destination_pic,100);
imagedestroy($src);
imagedestroy($tmp);
}

Ve bu ben yeniden boyutlandırmak için kullanıyorum ImageMagick kodu:

$resource = NewMagickWand(); 
MagickReadImage($resource,$image); 
MagickSetImageCompressionQuality( $resource, 100);
$resource = MagickTransformImage($resource,'0x0','660x500');
MagickWriteImage($resource, $image);
DestroyMagickWand($resource);

3 Cevap

http://pl.php.net/imagecreatefromjpeg

The memory required to load an image using imagecreatefromjpeg() is a function of the image's dimensions and the images's bit depth, multipled by an overhead. It can calculated from this formula: Num bytes = Width * Height * Bytes per pixel * Overhead fudge factor Where Bytes per pixel = Bit depth/8, or Bits per channel * Num channels / 8.

Bu GD parçası hakkında. Şimdi ImageMagick: Eğer basit bir yaklaşım denedim:

$thumb = new Imagick('image.jpg');
$thumb->resizeImage($w,$h,Imagick::FILTER_LANCZOS,1);
$thumb->writeImage('thumb.jpg');
$thumb->destroy();

Bu soru hakkında bir şey bilmiyorum, ama şu cevabı yararlıdır

http://stackoverflow.com/questions/74315/what-is-the-best-way-to-handle-photo-uploads

Her ihtimale not, bunu göz ardı edilir.

Php dosyanızın üstüne aşağıdaki kodu koyun lütfen.

ini_set ("memory_limit", "500M");