ms2Gallery Вопрос по уменьшению оригиналов изображений
У меня на сайте более 20GB изображений. Оригиналы загружались без ограничений. Есть ли способ уменьшить именно оригиналы, не превьюшки, а именно оригиналы!
Способ Ильи ilyaut.ru/cheats/to-rebuild-all-previews-of-products/ не трогает оригиналы…
Способ Ильи ilyaut.ru/cheats/to-rebuild-all-previews-of-products/ не трогает оригиналы…
Комментарии: 1
Вот тебе решение, тут я использую сниппет phpThumbOn и проверяю файлы которые весят более 1мб и делаю ресайз по ширине 1024px, создай файл в корне сайта msproducts_resizer.php и запусти его, в журнале все сообщения!
<?php
// Ресайзер оригиналов изображений msProduct по быстрому
// Определяем режим API MODX
define('MODX_API_MODE', true);
require 'index.php';
// Инициализация MODX
/** @var modX $modx */
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
// Путь к папке с продуктами
$basePath = MODX_BASE_PATH . 'assets/images/products/';
// Размер файла в байтах (1 МБ = 1048576 байт)
$maxFileSize = 1048576;
// Максимальная ширина после ресайза
$maxWidth = 1024;
// Логика поиска и ресайза изображений
function resizeImagesWithPhpThumb($basePath, $maxFileSize, $maxWidth)
{
global $modx;
// Получаем список всех подпапок в директории products
$directories = glob($basePath . '*', GLOB_ONLYDIR);
foreach ($directories as $dir) {
// Получаем все файлы изображений в текущей подпапке
$images = glob($dir . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
foreach ($images as $imagePath) {
// Проверяем размер файла
if (filesize($imagePath) > $maxFileSize) {
try {
// Генерируем URL для ресайза с помощью phpThumbOn
$relativePath = str_replace(MODX_BASE_PATH, '', $imagePath); // Относительный путь
$thumbUrl = $modx->runSnippet('phpThumbOn', [
'input' => $relativePath,
'options' => "w={$maxWidth}&zc=1", // Ширина 1024px, сохранение пропорций
]);
// Путь к новому изображению
$newImagePath = MODX_BASE_PATH . ltrim($thumbUrl, '/');
// Заменяем оригинальное изображение на новое
if (file_exists($newImagePath)) {
unlink($imagePath); // Удаляем старое изображение
rename($newImagePath, $imagePath); // Переименовываем новое изображение
}
// Логируем успешное изменение
$modx->log(modX::LOG_LEVEL_INFO, "Изображение {$imagePath} успешно изменено.");
} catch (\Exception $e) {
// Логируем ошибку при обработке изображения
$modx->log(modX::LOG_LEVEL_ERROR, "Ошибка при обработке изображения {$imagePath}: " . $e->getMessage());
}
} else {
// Логируем, если размер файла меньше порогового значения
$modx->log(modX::LOG_LEVEL_INFO, "Изображение {$imagePath} меньше 1 МБ, пропускаем.");
}
}
}
}
// Запуск логики
resizeImagesWithPhpThumb($basePath, $maxFileSize, $maxWidth);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.