У меня есть $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);
}
Что здесь не так?
> Если координаты источника и места назначения, а также ширина и высота различны, будет выполнено соответствующее растяжение или сжатие фрагмента изображения. Координаты относятся к верхнему левому углу. Эта функция может использоваться для копирования областей внутри одного изображения (если dst_image совпадает с src_image), но если области перекрываются, результаты будут непредсказуемыми. – Shikiryu