Наверное, многие сталкивались с тем, что на сайт нужно закачивать фотографии с конкретными пропорциями, конкретного размера, в то время как исходные фотографии всегда "пляшут" по всем параметрам, да еще и в разных форматах сохранены и не уменьшены.
Предлагаемое решение избавит вас от этой проблемы.
Прилагаемые две функции вставьте в /netcat/modules/default/function.inc.php.
В действии после изменения или добавления объекта, где нужно обработать фотографии, вызывайте данную функцию следующим образом:
welpis_croppic($photo_path,$photo_path, 400, 300); // 400х300 - это для примера, требуемые выходные размеры фотографии в пикселях (ширина, высота)
здесь $photo_path - путь к только что загруженной фотографии.
Этот путь можно узнать, например, с помощью nc_file_path, если речь идет о поле типа "Файл".
А если речь идет об обработке поля "Множественная загрузка", то можно применить такую конструкцию:
Код:if(count($files_name))
foreach($files_name as $v){
$photo_path = $DOCUMENT_ROOT.'/netcat_files/multifile/XXX/'.$v;
if(!is_file($photo_path)) continue;
welpis_croppic($photo_path,$photo_path, 400, 300); }
Здесь XXX - ID поля, в который были загружены фотографии.
Причем, если в компоненте не одно мультифайловое поле, а несколько, то данный способ работать с большой вероятностью не будет. Потребуется доработка, т.к. $files_name содержит в себе только файлы последнего мультифайлового поля.
Что делает функция:
1. Определяет пропорции будущего итогового изображения
2. Хорошенько думает, каким образом исходный файл лучше привести к данным пропорциям
3. В зависимости от решения, принятого в п.2. - либо подрезает у картинки верх и низ, либо подрезает у нее кусочек справа и кусочек слева. В результате потери у исходной фотографии минимальны
4. Смотрит требуемые габариты картинки и масштабирует результат работы в п.3 до этих размеров. Либо пропорционально уменьшает, либо пропорционально увеличивает.
В итоге получается модификация исходной картинки, которая приведена точно к тем размерам, которые нам требуются.
Обратите внимание, что разрешение исходной картинки может быть любым - хоть 4000х5000 пикселей, все равно программа приведет ее к требуемым характеристикам.
Комментарии 0