Это мой первый раз, используя функцию ImageCopyResampled. Я просто выполнил код, написанный в руководстве по PHP . Когда я запускал код, ошибок не было. Проблема в том, что мой код просто копирует исходное изображение и не соответствует размерам, как это было определено в параметрах, переданных в функции. Ниже мой код:
public static function uploadFile($filename, $x_dimension, $y_dimension, $width, $height){ $file = DOCROOT . "uploads/temp/".$filename; $trgt_file = DOCROOT . "uploads/images/thumbs/".$filename; if(is_file($file) AND file_exists($file)): $trgt_w = 198; $trgt_h = 130; if(copy($file, $trgt_file)): $src_img = imageCreateFromJpeg($file); $trgt_img = imageCreateTrueColor($trgt_w, $trgt_h); imageCopyResampled($trgt_img, $src_img, 0, 0, $x_dimension, $y_dimension, $trgt_w, $trgt_h, $width ,$height); unlink($file); endif; endif; }
Эта функция просто скопирует исходный файл и не происходит обрезка. Что я упустил?
BTW, я использую kohana 3. Спасибо.
Вы не сохраняете $trgt_img
в файл, поэтому обрезанное изображение теряется при завершении скрипта.
Вам нужно записать данные с помощью imageJPEG()
(или любого imageJPEG()
формата, который вы хотите записать).
imageCopyResampled($trgt_img, $src_img, 0, 0, $x_dimension, $y_dimension, $trgt_w, $trgt_h, $width ,$height); imagejpeg($trgt_img, $filename, 90); // 90 is for quality - 75 is the default
Ответ Пекки верен, но имя файла, которое сохраняется как неверное, должно быть $ trgt_file вместо $ filename;