Пошаговый скрипт ресайз картинок jpeg (больше 1600) из b_file из заменой.
[CODE]<?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>
<?
}
[/CODE]
[QUOTE][I]*На основе скрипта, постом выше - "ватермарк на все фотки c width>1000 в папке /upload/iblock ".[/I][/QUOTE]
[CODE]<?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>
<?
}
[/CODE]
[QUOTE][I]*На основе скрипта, постом выше - "ватермарк на все фотки c width>1000 в папке /upload/iblock ".[/I][/QUOTE]