CFile::ResizeImageFile(
$sourceFile,
&$destinationFile,
$arSize,
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
$arWaterMark = array(),
$jpgQuality=false,
$arFilters=false
)
Метод производит изменение размера графического файла. Если исходный файл с расширением BMP, то файл-результат будет переконвертирован как JPEG и в destinationFile вернется модифицированное имя. Статический метод.
Параметры
Параметр |
Описание | С версии |
sourceFile |
Путь к исходному файлу | |
destinationFile |
Путь к файлу - результату обработки. Если исходный файл в формате BMP, то файл будет переконвертирован в JPEG и в destinationFile вернется модифицированное имя. | |
Size |
Массив вида array("width" => $width, "height" => $height)); оба ключа обязательны. | |
resizeType |
тип масштабирования:
- BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize без сохранения пропорций;
- BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
- BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
| |
arWaterMark |
массив с параметрами водяного знака, ключи:
- text - текст водяного знака
- font - путь к TTF-шрифту (TTF/UTF-8)
- type - text или image
- min_size_picture - минимальная ширина картинки
- color - цвет "RRGGBB"
- alpha_level - прозрачность от 0 до 100, где 0 = прозрачно, 100 = непрозрачно. (Применяется только для авторского знака в виде картинки.)
- size - размер. big; medium; small; real, для произвольного изменения масштаба возможно указание коэффициента через параметр 'coefficient', параметр 'real' применим только для изображений ('type'=>'image')
- position - указание расположения водяного знака на изображении возможно в двух нотациях:
- "{m|b}{c|r}", где m - центр по вертикали, b - низ, c - центр по горизонтали, r - правый край.
- topleft; topcenter; topright; centerleft; center; centerright; bottomleft; bottomcenter; bottomright.
| |
jpgQuality |
Величина JPG-сжатия. Необязательный. По умолчанию false, что равно 95% качества изображения. Если необходимо полное качество, передавайте параметр "100". | 9.0.0 |
Filters |
Массив параметров фильтра. Необязательный. По умолчанию false. | 10.0.4 |
Примеры использования
1
Володимир Ожух
13.12.2016 15:34:14
|
Пошаговый скрипт ресайз картинок jpeg (больше 1600) из b_file из заменой. Код |
---|
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'); // include bitrix prolog (clasess)
define("STOP_STATISTICS", true); // disable statistic
CModule::IncludeModule("iblock");
global $DB;
$LastID=0; // start ID
$obRes = Bitrix\Main\FileTable::GetList(array(
'select' => array('ID', 'HEIGHT', 'WIDTH', 'FILE_SIZE','SUBDIR','FILE_NAME'),
'filter' => array('>ID'=>$LastID, 'CONTENT_TYPE'=>'image/jpeg'), //
'order' => array('ID'=>'asc'),
'limit' => 5 // файлов за шаг
));
$ptime = getmicrotime();
$io = CBXVirtualIo::GetInstance();
while ( $arRes = $obRes->fetch() )
{
// ограничение по размеру
if($arRes['HEIGHT']>1600 || $arRes['WIDTH']>1600){
//only big
$ToResizeImg = $_SERVER["DOCUMENT_ROOT"].'/upload/'.$arRes['SUBDIR'].'/'.$arRes['FILE_NAME'];
$tempFile = $_SERVER['DOCUMENT_ROOT']."/upload/1.jpeg";
$rif = CFile::ResizeImageFile( // уменьшение картинки для превью
$sourceFile = $ToResizeImg,
$destinationFile = $tempFile,
$arSize = array('width'=>1600,'height'=>1600),
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
$arWaterMark = array(),
$jpgQuality=false,
$arFilters =false
);
if ($rif) {
$arImageSize = CFile::GetImageSize( $tempFile);
$f = $io->GetFile($tempFile);
$arImageSize[2] = $f->GetFileSize();
unlink($ToResizeImg);
rename($tempFile, $ToResizeImg);
//обновить поля в b_file
$DB->Query("UPD ATE b_file SE T FILE_SIZE='".round(floatval($arImageSize[2]))."', HEIGHT='".round(floatval($arImageSize[1]))."', WIDTH='".round(floatval($arImageSize[0]))."' WHERE ID=".intval($arRes['ID']));
}
}
$LastID = intval($arRes['ID']);
}
echo "Цикл выполнялся ".round(getmicrotime()-$ptime, 3)." секунд";
echo '<pre>$LastID';
print_r($LastID);
echo '</pre>';
if($LastID>0){
?>
<sc ript>
setTimeout(function(){
window.location.reload(1);
}, 700);
</sc ript>
<?
}
|
Цитата |
---|
*На основе скрипта, постом выше - "ватермарк на все фотки c width>1000 в папке /upload/iblock ". |
|
|
0
Антон Долганин
10.08.2016 12:34:42
|
От техподдержки Параметр fill может быть равен resize, тогда размер ватемарка расчитывается на основании значения coefficient Код |
---|
$wmWidth = round($Params["width"] * $Params["coefficient"]);
$wmHeight = round($Params["height"] * $Params["coefficient"]);
|
иначе, значение может быть repeat, тогда размер не меняется и производится заполнение всего изображения ватемарком
|
|
0
Антон Долганин
09.08.2016 15:26:57
|
Пример простейшего вотермарка для картинки Код |
---|
$arWatermark = array(
'position' => 'mc',//допустимые http://prntscr.com/c3hc9i
'type' => 'file',
'size' => 'real',
'alpha_level' => 100,//прозрачность
'file' => $_SERVER['DOCUMENT_ROOT'].Rel2Abs('/', '/upload/watermark.png'),
);
|
|
|
6
Dmitry Ipatov
05.06.2015 12:15:31
|
Скрипт для уменьшения картинок в PREVIEW_PICTURE Код |
---|
CModule::IncludeModule("iblock");
$i = 0;
$res = CIBlockElement::GetList(
array('ID' => 'ASC'),
array('IBLOCK_ID' => IBLOCK_CATALOG),
false,
false,
array('ID', 'IBLOCK_ID', 'PREVIEW_PICTURE')
);
while($ar_res = $res->Fetch())
{
$image = CFile::GetFileArray($ar_res['PREVIEW_PICTURE']);
$image_src = $_SERVER['DOCUMENT_ROOT'] . $image['SRC'];
$tmp_image = $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $image['FILE_NAME'];
CFile::ResizeImageFile(
$image_src,
$tmp_image,
array('width'=>163, 'height'=>134),
BX_RESIZE_IMAGE_PROPORTIONAL
);
unlink($image_src);
rename($tmp_image, $image_src);
$i++;
}
echo 'Сжато изображений: ' . $i; |
|
|
1
Дмитрий Репин
09.09.2014 12:16:52
|
Не забывайте последний массив-параметр, заключать в array(); Код |
---|
$rif = CFile::ResizeImageFile(
$_SERVER["DOCUMENT_ROOT"]."/1.JPG",
$a = $_SERVER["DOCUMENT_ROOT"]."/4.JPG",
array('width'=>300, 'height'=>300),
BX_RESIZE_IMAGE_PROPORTIONAL,
array(),
100
,array(array("name" => "sharpen", "precision" => 15))
); |
|
|
1
Азат Фаттахов
05.11.2013 00:38:33
|
ватермарк на все фотки c width>1000 в папке /upload/iblock Код |
---|
<?
function GetListFiles($folder,&$all_files){
$fp=opendir($folder);
while($cv_file=readdir($fp)) {
if(is_file($folder."/".$cv_file)) {
$all_files[]=$folder."/".$cv_file;
}elseif($cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){
GetListFiles($folder."/".$cv_file,$all_files);
}
}
closedir($fp);
}
$all_files=array();
GetListFiles($_SERVER['DOCUMENT_ROOT']."/upload/iblock",$all_files);
//print_r($all_files);
foreach ($all_files as $img) {
list($width, $height, $type, $attr) = getimagesize($img);
if ($width>1000) {
echo $img."<br>";
$rif = CFile::ResizeImageFile( // уменьшение картинки для превью
$sourceFile = $img,
$destinationFile = $_SERVER['DOCUMENT_ROOT']."/upload/1.png",
$arSize = array('width'=>$width,'height'=>$height),
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
$arWaterMark = array(),
$jpgQuality=false,
$arFilters = Array( // нанесение водяного знака
array("name" => "watermark", "position" => "center", "file"=>$_SERVER['DOCUMENT_ROOT']."/upload/water.png")
)
);
if ($rif) {
unlink($img);
rename($_SERVER['DOCUMENT_ROOT']."/upload/1.png", $img);}
}
}
?>
|
|
|
4
stsvolmsk
04.06.2012 19:10:57
|
В тексте страницы были картинки, на которые нужно было добавить водяной знак и сделать уменьшенную копию для привью prettyPhoto Код |
---|
$wmMini = CFile::ResizeImageFile( // уменьшение водяного знака
$sourceFile = $_SERVER["DOCUMENT_ROOT"]."/img/watermark.png",
$destinationFile = $_SERVER["DOCUMENT_ROOT"]."/img/mini_watermark.png",
$arSize = array('width'=>9999, 'height'=>100),
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
$arWaterMark = array(),
$jpgQuality=false,
$arFilters =false
);
$rif = CFile::ResizeImageFile( // уменьшение картинки для превью
$sourceFile = $_SERVER["DOCUMENT_ROOT"]."/img/sect_img/canal1_1.jpg",
$destinationFile = $_SERVER["DOCUMENT_ROOT"]."/img/sect_img/"."wm_"."canal1_1.jpg",
$arSize = array('width'=>300, 'height'=>300),
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
$arWaterMark = array(),
$jpgQuality=false,
$arFilters = Array( // нанесение водяного знака
array("name" => "watermark", "position" => "center", "file"=>$_SERVER['DOCUMENT_ROOT']."/img/mini_watermark.png")
)
);
|
|
|
© «Битрикс», 2001-2022, «1С-Битрикс», 2022
Наверх
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.