PHP上传大尺寸图片

时间:2017-11-11 16:47:09

标签: php

有人可以帮助我,几乎所有的头发现在已经消失了。我试图将大图片上传到网站时遇到问题。我已经修好了,一切似乎都运转正常。我用10Mb + JPEG文件测试了我的脚本,看起来都很完美。但是,我刚尝试从某人手机上传JPEG(4.9Mb),我收到500错误。看看PS中的图片,尺寸为1054px宽,1874px高,72dpi。任何人都可以帮助我,为什么这是一个问题,我怎么解决它?如果我将图片缩小(700px宽),它上传得很好吗?

有没有人有同样的问题?下面是我的代码,它可以旋转图像(因为一些手机在上传时会颠倒出来),然后调整大文件的大小以便于存储。所有我试过的图片看起来都很有用......除了这个肖像,它的st wide宽!有人请帮忙!

$file_name = $_FILES['newPicture']['tmp_name'];

correctImageOrientation($file_name);
AdjustPicSize($file_name);


function correctImageOrientation($file_name) {
  if (function_exists('exif_read_data')) {
    $exif = exif_read_data($file_name);
    if($exif && isset($exif['Orientation']) || !isset($exif['Orientation'])) {
      $orientation = $exif['Orientation'];
      if($orientation != 1){
        $img = imagecreatefromjpeg($file_name);
        $deg = 0;
        switch ($orientation) {
          case 3:
            $deg = 180;
            break;
          case 6:
            $deg = 270;
            break;
          case 8:
            $deg = 90;
            break;
        }
        if ($deg) {
          $img = imagerotate($img, $deg, 0);       
        }
        // then rewrite the rotated image back to the disk as $filename
        imagejpeg($img, $file_name, 95);
      } // if there is some rotation necessary
    } // if have the exif orientation info
  } // if function exists     
}


function AdjustPicSize($file_name)
{
    $maxDim = 800;

        list($width, $height, $type, $attr) = getimagesize( $file_name );
        if ( $width > $maxDim || $height > $maxDim ) {
            $target_filename = $file_name;
            $ratio = $width/$height;
            if( $ratio > 1) {
                $new_width = $maxDim;
                $new_height = $maxDim/$ratio;
            } else {
                $new_width = $maxDim*$ratio;
                $new_height = $maxDim;
            }
            $src = imagecreatefromstring( file_get_contents( $file_name ) );
            $dst = imagecreatetruecolor( $new_width, $new_height );
            imagecopyresampled( $dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
            imagejpeg( $dst, $target_filename ); // adjust format as needed
        }
}

请保持温和,我对这一切都有点新鲜!

1 个答案:

答案 0 :(得分:0)

这是内存限制问题,您可能想要增加它或考虑使用图像magick。 GD使用RAM存储数据并从5 MB文件(大尺寸)创建新资源会花费你的内存