ProfiPHPProfiPHP
  1. Главная
  2. Поддержка OUR-CMS
  3. Оптимизация изображений в OUR-CMS

Оптимизация изображений в OUR-CMS

На сайте возможна ситуация, когда изображения, которые в большинстве случаев несут чисто ознакомительный характер, занимают очень много места. Если с техническими характеристиками хостинга проблем нет, тогда нужно подумать о пользователях, которые загружают данные изображения. Посмотрите на следующие изображения:

Занимает 149 КБ.
А теперь на тоже самое изображение, но оптимизированное:

Занимает 40 КБ.

Разница в качестве изображении минимальная. Была специально выбрана сложная картинка, чтобы можно было максимально видеть различие данных изображений.

Как видно, второе изображение практически не отличается от первого, но размер в 3 раза меньше, что в свою очередь позволит значительно быстрее загрузится.

Данный скрипт оптимизирует по качеству все загруженные изображения. Расширение изображений не изменяется.

Для установки скопируйте содержимое архива Image_optimization в корень сайта и запустите его:
http://yousite/image_optimization.php
Важно: Не забудьте сделать резервную копию папки с изображениями (userfiles/image/) сайта перед использованием данного скрипта.

Данный скрипт можно использовать на всех веб-ресурсах. В OUR-CMS изображения сохраняются в директории "/userfiles/image", но вы можете изменить данную директорию с изображениями в строке:
searchImages($_SERVER['DOCUMENT_ROOT'].'/userfiles/image');
Код исполняемого файла:
<?php
/*******************************/
/*** Оптимизация изображений ***/
/*******************************/
function get_size($bytes) {
if ($bytes < 1000 * 1024) {
return number_format($bytes / 1024, 2) . " KB";
} elseif ($bytes < 1000 * 1048576) {
return number_format($bytes / 1048576, 2) . " MB";
} elseif ($bytes < 1000 * 1073741824) {
return number_format($bytes / 1073741824, 2) . " GB";
} else {
return number_format($bytes / 1099511627776, 2) . " TB";
}
}
// Функция перебора изображений
function searchImages($path) {
global $oldSizeFile, $newSizeFile, $numImage;
if ($optimization_cat = glob($path.'/*')) {
foreach ($optimization_cat as $object) {
if (is_dir($object)) {
searchImages($object);
} else {
$pic = @getimagesize($object);
// Проверяем расширение и тип
if (!in_array(pathinfo($object, PATHINFO_EXTENSION), array('jpeg', 'jpg', 'png', 'gif')) || !in_array($pic['mime'], array('image/jpeg', 'image/png', 'image/gif'))) continue;
$oldSizeFile += filesize($object);
switch ($pic['mime']) {
case 'image/jpeg': $image = @imagecreatefromJpeg($object); break;
case 'image/png': $image = @imagecreatefromPng($object); break;
case 'image/gif': $image = @imagecreatefromGif($object); break;
}
$width = imageSX($image);
$height = imageSY($image);
if ($width < 800) {
$newSize = array($width, $height);
} else {
$newSize[0] = 800;
$newSize[1] = round($height * 800 / $width);
}
$newImage = imagecreatetruecolor($newSize[0], $newSize[1]);
if ($pic['mime'] == 'image/gif' || $pic['mime'] == 'image/png') {
$white = imagecolorallocate($newImage, 255, 255, 255);
imagefill($newImage, 0, 0, $white);
}
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newSize[0], $newSize[1], $width, $height);
switch ($pic['mime']) {
case 'image/jpeg': imagejpeg($newImage, $object, '85'); break;
case 'image/png': imagepng($newImage, $object); break;
case 'image/gif': imagegif($newImage, $object); break;
}
imagedestroy($newImage);

// Очищаем кеш состояния файла
clearstatcache($object);

$newSizeFile += filesize($object);
$numImage = !isset($numImage) ? $numImage = 1 : ++$numImage;
}
}
}
}
searchImages($_SERVER['DOCUMENT_ROOT'].'/userfiles/image');
echo '<p>Размер до оптимизации: '.get_size($oldSizeFile).'.</p>
<p>Размер после оптимизации: '.get_size($newSizeFile).'.</p>
<p>Количество изображений: '.$numImage.'</p>';

Добавить комментарий

Имя:
Текст комментария: