2012-04-05 108 views
2
function resize($originalImage){ 

      list($width, $height) = getimagesize($originalImage); 
      $newName=basename($originalImage); 
      $imageResized = imagecreatetruecolor(128, 128); 
      $imageTmp  = imagecreatefromjpeg ($originalImage); 
      imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, 128, 128, $width, $height); 

      imagejpeg($imageResized, "resizedImg/$newName",100); 
      imageDestroy($imageResized); 

} 

该脚本返回的图像名称正确,但它只是黑色?有任何想法吗?用php调整图像大小

+0

你上传了什么类型的图片? – Sara 2012-04-05 13:53:42

+0

我已经测试过你的功能,它的工作。检查你的图片类型,确保它是'jpg' – safarov 2012-04-05 14:00:50

回答

4

如果您在调整图像大小时遇到​​问题,请使用此代码。根据需要进行修改。

function resizeImage($file){ 

     define ('MAX_WIDTH', 1500);//max image width    
     define ('MAX_HEIGHT', 1500);//max image height 
     define ('MAX_FILE_SIZE', 10485760); 

     //iamge save path 
     $path = 'storeResize/'; 

     //size of the resize image 
     $new_width = 128; 
     $new_height = 128;  

     //name of the new image   
     $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']);  

     $image_type = $file['type']; 
     $image_size = $file['size']; 
     $image_error = $file['error']; 
     $image_file = $file['tmp_name']; 
     $image_name = $file['name'];   

     $image_info = getimagesize($image_file); 

     //check image type 
     if ($image_info['mime'] == 'image/jpeg' or $image_info['mime'] == 'image/jpg'){  
     } 
     else if ($image_info['mime'] == 'image/png'){  
     } 
     else if ($image_info['mime'] == 'image/gif'){  
     } 
     else{    
      //set error invalid file type 
     } 

     if ($image_error){ 
      //set error image upload error 
     } 

     if ($image_size > MAX_FILE_SIZE){ 
      //set error image size invalid 
     } 

     switch ($image_info['mime']) { 
      case 'image/jpg': //This isn't a valid mime type so we should probably remove it 
      case 'image/jpeg': 
      $image = imagecreatefromjpeg ($image_file); 
      break; 
      case 'image/png': 
      $image = imagecreatefrompng ($image_file); 
      break; 
      case 'image/gif': 
      $image = imagecreatefromgif ($image_file); 
      break; 
     }  

     if ($new_width == 0 && $new_height == 0) { 
      $new_width = 100; 
      $new_height = 100; 
     } 

     // ensure size limits can not be abused 
     $new_width = min ($new_width, MAX_WIDTH); 
     $new_height = min ($new_height, MAX_HEIGHT); 

     //get original image h/w 
     $width = imagesx ($image); 
     $height = imagesy ($image); 

     //$align = 'b'; 
     $zoom_crop = 1; 
     $origin_x = 0; 
     $origin_y = 0; 
     //TODO setting Memory 

     // generate new w/h if not provided 
     if ($new_width && !$new_height) { 
      $new_height = floor ($height * ($new_width/$width)); 
     } else if ($new_height && !$new_width) { 
      $new_width = floor ($width * ($new_height/$height)); 
     } 

     // scale down and add borders 
    if ($zoom_crop == 3) { 

     $final_height = $height * ($new_width/$width); 

     if ($final_height > $new_height) { 
      $new_width = $width * ($new_height/$height); 
     } else { 
      $new_height = $final_height; 
     } 

    } 

     // create a new true color image 
     $canvas = imagecreatetruecolor ($new_width, $new_height); 
     imagealphablending ($canvas, false); 


     if (strlen ($canvas_color) < 6) { 
      $canvas_color = 'ffffff';  
     } 

     $canvas_color_R = hexdec (substr ($canvas_color, 0, 2)); 
     $canvas_color_G = hexdec (substr ($canvas_color, 2, 2)); 
     $canvas_color_B = hexdec (substr ($canvas_color, 2, 2)); 

     // Create a new transparent color for image 
     $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G, $canvas_color_B, 127); 

     // Completely fill the background of the new image with allocated color. 
     imagefill ($canvas, 0, 0, $color); 

     // scale down and add borders 
    if ($zoom_crop == 2) { 

      $final_height = $height * ($new_width/$width); 

     if ($final_height > $new_height) { 
      $origin_x = $new_width/2; 
      $new_width = $width * ($new_height/$height); 
      $origin_x = round ($origin_x - ($new_width/2)); 
      } else { 

      $origin_y = $new_height/2; 
      $new_height = $final_height; 
      $origin_y = round ($origin_y - ($new_height/2)); 

     } 

    } 

     // Restore transparency blending 
     imagesavealpha ($canvas, true); 

     if ($zoom_crop > 0) { 

      $src_x = $src_y = 0; 
      $src_w = $width; 
      $src_h = $height; 

      $cmp_x = $width/$new_width; 
      $cmp_y = $height/$new_height; 

      // calculate x or y coordinate and width or height of source 
      if ($cmp_x > $cmp_y) { 
     $src_w = round ($width/$cmp_x * $cmp_y); 
     $src_x = round (($width - ($width/$cmp_x * $cmp_y))/2); 
      } else if ($cmp_y > $cmp_x) { 
     $src_h = round ($height/$cmp_y * $cmp_x); 
     $src_y = round (($height - ($height/$cmp_y * $cmp_x))/2); 
      } 

      // positional cropping! 
     if ($align) { 
      if (strpos ($align, 't') !== false) { 
       $src_y = 0; 
      } 
         if (strpos ($align, 'b') !== false) { 
           $src_y = $height - $src_h; 
         } 
         if (strpos ($align, 'l') !== false) { 
       $src_x = 0; 
      } 
      if (strpos ($align, 'r') !== false) { 
       $src_x = $width - $src_w; 
      } 
     } 

      // positional cropping! 
      imagecopyresampled ($canvas, $image, $origin_x, $origin_y, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h); 

     } else {  
     imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
    } 
     //Straight from Wordpress core code. Reduces filesize by up to 70% for PNG's 
     if ((IMAGETYPE_PNG == $image_info[2] || IMAGETYPE_GIF == $image_info[2]) && function_exists('imageistruecolor') && !imageistruecolor($image) && imagecolortransparent($image) > 0){ 
      imagetruecolortopalette($canvas, false, imagecolorstotal($image)); 
    } 
     $quality = 100;    
     $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']);  

    if (preg_match('/^image\/(?:jpg|jpeg)$/i', $image_info['mime'])){      
     imagejpeg($canvas, $path.$nameOfFile, $quality); 

    } else if (preg_match('/^image\/png$/i', $image_info['mime'])){       
     imagepng($canvas, $path.$nameOfFile, floor($quality * 0.09)); 

    } else if (preg_match('/^image\/gif$/i', $image_info['mime'])){    
     imagegif($canvas, $path.$nameOfFile); 

    } 
} 
+0

看起来像不错的代码,但它不适合我:/ 警告:getimagesize(b):未能打开流:没有这样的文件或目录在/ customers/6 /在线357上的c/d/fulcio.co.uk/httpd.www/dbc.php警告:imagesx()期望参数1是资源,null在/customers/6/c/d/fulcio.co.uk/中给出在线401上的httpd.www/dbc.php警告:imagesy()期望参数1是资源,null在/customers/6/c/d/fulcio.co.uk/httpd.www/dbc.php 402行中给出警告:imagecopyresampled()期望参数2是资源,null在506行/customers/6/c/d/fulcio.co.uk/httpd.www/dbc.php中给出。 – JonE 2012-04-05 14:31:17

+0

这只是没有通过文件,但我不不知道为什么。我知道我在问题中给出的代码通过了这些文件:? – JonE 2012-04-05 14:33:26

+0

使用'print_r($ _ FILE)'检查图像是否正确上传。此代码完美运行。根据需要更改它。 – Sara 2012-04-05 14:42:14