繁体   English   中英

如何上传/调整数码相机拍摄的图像?

[英]How can I upload/resize images taken with a digital camera?

我正在建造画廊,目标是降低进入门槛。 我的用户是使用数码相机拍照的人,因此每个图像的文件大小在200-400 KB之间。

我在使用GD库时遇到的问题是,当服务器的大小限制为64 MB时,调整大小和上载时的每个图像都使用大约90MB的内存。

当我使用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);

http://pl.php.net/imagecreatefromjpeg

使用imagecreatefromjpeg()加载图像所需的内存是图像尺寸和图像位深的函数,并乘以开销。 它可以根据以下公式计算得出:Num字节=宽度*高度*每个像素的字节*开销软键系数,其中每个像素的字节=位深度/ 8,或每个通道的位* Num通道/ 8。

那是关于GD的部分。 现在,ImageMagick:您是否尝试过一种更简单的方法:

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

请在您的php文件顶部放置以下代码。

ini_set(“ memory_limit”,“ 500M”);

我对这个问题一无所知,但是以下答案有用吗

处理照片上传的最佳方法是什么?

万一不是 ,请忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM