Доброго времени суток! Прошу помощи с вопросом: при загрузке на сайт одного изображения (анонса для статьи) нужного его масштабировать и обрезать при необходимости. Есть плагин отвечающий за загрузку, проверку и ограничения PHP: <?php if ($modx->event->name == 'OnDocFormSave') { if($mode == 'new'){ if (!empty($_FILES)) { $id = $resource->get('id'); $folder = 'images/logo-projects'; // имя папки куда грузить, должна быть создана (в корне сайта) $path = MODX_BASE_PATH.'/'.$folder.'/'; // Путь от корня до нужного места $tv_name = 'image-logo-project'; // имя тв // все значения файла $nameFile = $_FILES['image-logo-project']['name']; $typeFile = $_FILES['image-logo-project']['type']; $tmpNameFile = $_FILES['image-logo-project']['tmp_name']; $sizeFile = $_FILES['image-logo-project']['size']; $limit_size = 3*1024*1024; // 3 Mb - максимальный размер загружаемого файла $file_types = array("jpeg", "jpg", "png"); // доступные расширения для загрузки $extensionFile = substr(strrchr($nameFile, '.'), 1); // получаем расширение файла $NewNameFile = 'id_'.$id.'_'.date("m_d_y").'.'.$extensionFile; // наше новое имя файла if(is_uploaded_file($tmpNameFile)) // проверяем зашёл ли файл { if($limit_size > $sizeFile) { // Проверка на размер if(in_array($extensionFile, $file_types)){ // проверка на тип move_uploaded_file($tmpNameFile, $path.$NewNameFile); // загрузка файла $resource->setTVValue($tv_name, $folder.'/'.$NewNameFile); // запись в ТВ } } } } } } Как правильно сделать масштабирование, а при необходимости обрезку в рамках плагина. Спасибо!
добавить после/перед перемещением файла всю необходимую для обрезки байду - получение размера, проверка размера на выход за лимиты, собственно обрезка или масштабирование, запись нового изображения в файл. И да, по расширению с файлами работает только говно производства микрософт - виндовз. Весь адекватный мир смотрит на содержимое файла. Кури MIME TYPE и думай как это чудо заюзать в своём скрипте. Если лень думать - можешь погуглить по форуму. Я уже не раз выкладывал листинги по работе с загружаемыми файлами в целом, и по работе с миметайпами и размерами изображений в частности.
А если для получения расширения использовать PHP: // получаем расширение файла //использовать $extensionFile = pathinfo($nameFile, PATHINFO_EXTENSION); //вместо $extensionFile = substr(strrchr($nameFile, '.'), 1); Лучше именно mime type? а для mime type: PHP: $finfo = finfo_open(FILEINFO_MIME_TYPE); то в рамках плагина это будет PHP: $extensionFile = finfo_open(FILEINFO_MIME_TYPE); //на сколько понимаю получение mime switch($extensionFile) //а тут идет сравнения { case 'image/jpeg': $this->type = "jpg"; return true; case 'image/jpg': $this->type = "jpg"; return true; case 'image/png': $this->type = "png"; eturn true; default: return false; } finfo_close($extensionFile); Написал скорей всего не верно, если поможешь буду признателен или куда думать. Вопрос: есть разница между в данном случае с mime - jpg и JPG и с другими расширениями аналогично?
Когда ты делаешь свич ты можешь несколько кейсов подряд объявить и только потом начать работать с телом. А если ты не прервал тело брейком то произойдет проход на следующий кейс. Очень удобно. Это про твой код. Про регистр расширения - да хоть ziP или eXe - если содержимое файла будет image/jpeg, то любая адекватная ОС будет работать с ним как с изображением. Дело в том, что нормальные оси - никсы - читают первые Х байт из файла и применяют к ним таблицу миметипов. Так ОСь с почти 100% уверенностью знает, что за содержимое хранится в файле. Винда же еще в каменном веке придумала использовать расширение файла для идентификации его содержимого. Так что только винде не по барабану на эти забавные символы после последней точки в имени файла. Остальному миру практически посрать. Там есть маленькие нюансы, но они не так влияют на работу системы, как в винде.