title: php imagecopyresampled poor quality
body: <p>I have a php script which saves the original image, then resizes it - one thumbnail and one larger image for web viewing. This works well except with some images the quality is terrible. It seems to be saved with a very low colour pallet. You can see the result at <a href="http://kalpaitch.com/index.php?filter=white" rel="nofollow noreferrer">http://kalpaitch.com/index.php?filter=white</a> - click on the first thumbnail with the title 'white white white'</p>
  
  <p>Below is the code used for the image resampling:</p>
  
  <pre><code>function resizeImg($name, $extension, $size1, $size2) {
  if (preg_match('/jpg|jpeg|JPG|JPEG/',$extension)){
      $image = imagecreatefromjpeg($name);
  }
  if (preg_match('/gif|GIF/',$extension)){
      $image = imagecreatefromgif($name);
  }
  
  $old_width = imageSX($image);
  $old_height = imageSY($image);
  $old_aspect_ratio = $old_width/$old_height; 
  
  if($size2 == 0){
      $new_aspect_ratio = $old_aspect_ratio;
      if($old_width &gt; $old_height){
          $new_width = $size1;
          $new_height = $new_width / $old_aspect_ratio;
      } else {
          $new_height = $size1;
          $new_width = $new_height * $old_aspect_ratio;
      }
  } elseif($size2 &gt; 0){
      $new_aspect_ratio = $size1/$size2;
      //for landscape potographs
      if($old_aspect_ratio &gt;= $new_aspect_ratio) {
          $x1 = round(($old_width - ($old_width * ($new_aspect_ratio/$old_aspect_ratio)))/2);
          $old_width = round($old_width * ($new_aspect_ratio/$old_aspect_ratio));
          $y1 = 0;
          $new_width = $size1;
          $new_height = $size2;
          //for portrait photographs
      } else{
          $x1 = 0;
          $y1 = 0;
          $old_height = round($old_width/$new_aspect_ratio);
          $new_width = $size1;
          $new_height = $size2;
      }
  }
  
  $new_image = imagecreatetruecolor($new_width, $new_height);
  imagecopyresampled($new_image, $image, 0, 0, $x1, $y1, $new_width, $new_height, $old_width, $old_height);
  
  return $new_image;
  </code></pre>
  
  <p>Many Thanks</p>
  
  <p>P.S.
  [photos removed from server]</p>
  
  <p>And here is the rest of the upload code:</p>
  
  <pre><code>// Move the original to the right place
          $result = @move_uploaded_file($image['tmp_name'], $origlocation);
  
          // Resize the image and save the thumbnail
          $new_image = resizeImg($origlocation, $extension, 500, 0);
  
          if (preg_match("/gif/",$extension)){
              imagegif($new_image, $normallocation); 
          } else {
              imagejpeg($new_image, $normallocation); 
          }
  
          // Resize the image and save the thumbnail
          $new_image = resizeImg($origlocation, $extension, 190, 120);
  
          if (preg_match("/gif/",$extension)){
              imagegif($new_image, $thumblocation); 
          } else { 
              imagejpeg($new_image, $thumblocation);
          }
  </code></pre>