Друзья, привет. Есть такой код, найденный на просторах интернета:
[CODE]// События которые срабатывают при создании или изменении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "ResizeUploadedPhoto");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "ResizeUploadedPhoto");
function ResizeUploadedPhoto(&$arFields) {
global $APPLICATION;
CModule::IncludeModule('iblock');
$IBLOCK_ID = 15; // ID инфоблока свойство которых нуждается в масштабировании
$PROPERTY_CODE = "FOTOALL"; // код свойства
$imageMaxWidth = 1000; // Максимальная ширина картинки
$imageMaxHeight = 658; // Максимальная высота картинки
// для начала убедимся, что изменяется элемент нужного нам инфоблока
if($arFields["IBLOCK_ID"] == $IBLOCK_ID) {
$VALUES = $VALUES_OLD = array();
//Получаем свойство значение сво-ва $PROPERTY_CODE
$res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));
while ($ob = $res->GetNext()) {
$file_path = CFile::GetPath($ob['VALUE']); // Получаем путь к файлу
if($file_path) {
$imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
// Если размер больше установленного максимума
if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
// Уменьшаем размер картинки
$file = CFile::ResizeImageGet($ob['VALUE'], array(
'width'=>$imageMaxWidth,
'height'=>$imageMaxHeight
), BX_RESIZE_IMAGE_EXACT, true);
// добавляем в массив VALUES новую уменьшенную картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]);
} else
{
// добавляем в массив VALUES старую картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
}
// Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
$VALUES_OLD[] = $ob['VALUE'];
}
}
// Если в массиве есть информация о новых файлах
if(count($VALUES) > 0) {
$PROPERTY_VALUE = $VALUES; // значение свойства
// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($arFields["ID"], $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
// Удаляем старые большие изображения
foreach ($VALUES_OLD as $key=>$val) {
CFile::Delete($val);
}
}
unset($VALUES);
unset($VALUES_OLD);
}
}
[/CODE]Использую его для загрузки больших фотографий в новостную ленту. Собственно все ок. Скрипт умеет уменьшать фото, если обе стороны больше нужного размера. Также скрипт работает если одна из сторон больше, а другая меньше - в это случае скрипт режет фото и увеличивает меньшую сторону (что тоже ок),
[B]НО [/B]если картинка меньше по высоте и ширине, то скрипт игнорирует ее и загружает "как есть". Причем добавление второго условия вида:
[CODE]// Если размер МЕНЬШЕ установленного максимума
else if($imsize[0] < $imageMaxWidth or $imsize[1] < $imageMaxHeight) {[/CODE]не влияют на результат (просто скрипт перестает работать).
В итоге, други, прошу помочь реальным примером (тк с php не дружу, а точнее не шарю), как же мне к этому скрипту прикрутить функцию увеличения фото до нужных размеров. И да, пускай пикселится - это не важно.
Заранее спасибо!
[CODE]// События которые срабатывают при создании или изменении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "ResizeUploadedPhoto");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "ResizeUploadedPhoto");
function ResizeUploadedPhoto(&$arFields) {
global $APPLICATION;
CModule::IncludeModule('iblock');
$IBLOCK_ID = 15; // ID инфоблока свойство которых нуждается в масштабировании
$PROPERTY_CODE = "FOTOALL"; // код свойства
$imageMaxWidth = 1000; // Максимальная ширина картинки
$imageMaxHeight = 658; // Максимальная высота картинки
// для начала убедимся, что изменяется элемент нужного нам инфоблока
if($arFields["IBLOCK_ID"] == $IBLOCK_ID) {
$VALUES = $VALUES_OLD = array();
//Получаем свойство значение сво-ва $PROPERTY_CODE
$res = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], "sort", "asc", array("CODE" => $PROPERTY_CODE));
while ($ob = $res->GetNext()) {
$file_path = CFile::GetPath($ob['VALUE']); // Получаем путь к файлу
if($file_path) {
$imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
// Если размер больше установленного максимума
if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
// Уменьшаем размер картинки
$file = CFile::ResizeImageGet($ob['VALUE'], array(
'width'=>$imageMaxWidth,
'height'=>$imageMaxHeight
), BX_RESIZE_IMAGE_EXACT, true);
// добавляем в массив VALUES новую уменьшенную картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]);
} else
{
// добавляем в массив VALUES старую картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
}
// Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
$VALUES_OLD[] = $ob['VALUE'];
}
}
// Если в массиве есть информация о новых файлах
if(count($VALUES) > 0) {
$PROPERTY_VALUE = $VALUES; // значение свойства
// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($arFields["ID"], $arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
// Удаляем старые большие изображения
foreach ($VALUES_OLD as $key=>$val) {
CFile::Delete($val);
}
}
unset($VALUES);
unset($VALUES_OLD);
}
}
[/CODE]Использую его для загрузки больших фотографий в новостную ленту. Собственно все ок. Скрипт умеет уменьшать фото, если обе стороны больше нужного размера. Также скрипт работает если одна из сторон больше, а другая меньше - в это случае скрипт режет фото и увеличивает меньшую сторону (что тоже ок),
[B]НО [/B]если картинка меньше по высоте и ширине, то скрипт игнорирует ее и загружает "как есть". Причем добавление второго условия вида:
[CODE]// Если размер МЕНЬШЕ установленного максимума
else if($imsize[0] < $imageMaxWidth or $imsize[1] < $imageMaxHeight) {[/CODE]не влияют на результат (просто скрипт перестает работать).
В итоге, други, прошу помочь реальным примером (тк с php не дружу, а точнее не шарю), как же мне к этому скрипту прикрутить функцию увеличения фото до нужных размеров. И да, пускай пикселится - это не важно.
Заранее спасибо!