2011-01-28 2 views
1

У меня есть $this->_tempFile, который содержит временный путь загруженного файла изображения.Масштабирование изображений не работает должным образом?

Теперь я хочу масштабировать изображение, оно изменяет его размеры, но оно не масштабируется вправо. Выход представляет собой большой черный квадрат внизу на высоте и половину изображения (ширина). И я пробовал с другими изображениями, и все получается из этих размеров: 293px × 453px, почему я не знаю?

Вот моя функция для scaleImage();

scaleImage(900, 582); 

public function scaleImage($width, $height){ 
    $rel_difference = array('width'=>0, 'height'=>0); 
    if($width > 604) $rel_difference['width'] = ($width-604)/604; 
    if($height > 453) $rel_difference['height'] = ($height-453)/453; 

    asort($rel_difference); 
    $tmpname = $this->_tempFile; 
    $newwidth = $width/(1+end($rel_difference)); 
    $newheight = $height/(1+end($rel_difference)); 
    $newwidth = round($newwidth); 
    $newheight = round($newheight); 
    $jpeg_quality = 90; 

    switch(exif_imagetype($tmpname)) { 
     case IMAGETYPE_GIF: 
      $img_r = imagecreatefromgif($tmpname); 
      break; 
     case IMAGETYPE_JPEG: 
      $img_r = imagecreatefromjpeg($tmpname); 
      break; 
     case IMAGETYPE_PNG: 
      $img_r = imagecreatefrompng($tmpname); 
      break; 
     default: 
      echo json_encode(array('error' => 'Not an image!')); 
      exit(0); 
      break; 
    } 
    $dst_r = ImageCreateTrueColor($newwidth, $newheight); 

    imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $newwidth , $newheight, $width, $height); 

    imagejpeg($dst_r,$tmpname,$jpeg_quality); 

    } 

Что здесь не так?

+0

> Если координаты источника и места назначения, а также ширина и высота различны, будет выполнено соответствующее растяжение или сжатие фрагмента изображения. Координаты относятся к верхнему левому углу. Эта функция может использоваться для копирования областей внутри одного изображения (если dst_image совпадает с src_image), но если области перекрываются, результаты будут непредсказуемыми. – Shikiryu

ответ

1

Я подозреваю, что вы случайно перевернули высоту и ширину в параметрах, которые вы проходите. Таким образом,

scaleImage(582, 900); 
+0

Я сделал тест, используя слегка измененную версию исходного кода плаката, и он отлично работает, если ширина и высота переданы правильно, но приводит к описанной проблеме, если исходная ширина изображения передается как высота (и высота по ширине) , Итак, MIKE C верен. – horatio

+0

Ничего себе, это правда! Спасибо – Karem

Смежные вопросы