我正在建造一个画廊,目标是进入障碍。我的用户是使用数码相机拍照的人,因此每张图像的文件大小在200到400 KB之间。
我使用GD库遇到的问题是每个调整大小和上传的图像使用大约90MB的内存+当服务器有64 MB的限制时。
当我使用ImageMagick时,它超时并引发内部服务器错误。
我想知道是否有人有上传/调整如此大图像尺寸的经验,并且可以给我一些指示。
谢谢,
列维
编辑:这是我要上传的代码
/** 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);
}
}
}
以下是我用来调整大小的GD代码:
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);
}
这是我用来调整大小的ImageMagick代码:
$resource = NewMagickWand();
MagickReadImage($resource,$image);
MagickSetImageCompressionQuality( $resource, 100);
$resource = MagickTransformImage($resource,'0x0','660x500');
MagickWriteImage($resource, $image);
DestroyMagickWand($resource);
答案 0 :(得分:2)
http://pl.php.net/imagecreatefromjpeg
加载图像所需的内存 使用imagecreatefromjpeg()是一个 图像的尺寸和功能 图像的位深度,乘以 开销。它可以从中计算出来 这个公式:Num bytes = Width * 高度*每像素字节数*开销 软糖因子每像素的字节数= 位深度/ 8,或每通道位数* Num 频道/ 8.
这是关于GD部分的。现在ImageMagick:你尝试过一种更简单的方法:
$thumb = new Imagick('image.jpg');
$thumb->resizeImage($w,$h,Imagick::FILTER_LANCZOS,1);
$thumb->writeImage('thumb.jpg');
$thumb->destroy();
答案 1 :(得分:1)
请在php文件的顶部放置以下代码。
的ini_set( “memory_limit的”, “500M”);
答案 2 :(得分:0)