Сжатие изображений для веб-сайтов с помощью reSmush.it на PHP
Опубликовано в PHP
Изображения делают ваш сайт красивым и делают его удобнее для посетителей. Однако изображения также могут повлиять на производительность сайта и сделать его безумно медленным. И все мы знаем, что более медленные веб-сайты не могут добиться успеха в Интернете.
В этой статье мы покажем вам, как сжимать изображения для веб-сайтов с помощью reSmush.it на PHP. Используя эту услугу, пользователи могут уменьшить размер изображений на своих веб-сайтах. Это поможет повысить скорость страницы. ReSmush.it – это бесплатный инструмент для сжатия изображений. Пользователь может сжать столько изображений, сколько пожелает. Такого ограничения на количество изображений нет.
На момент написания этой статьи reSmush.it сжал более 7 миллиардов изображений, и их количество продолжает расти. Это число говорит о том, что услуга достаточно популярна среди пользователей.
Начиная
Создадим простую форму, в которую пользователь может загрузить изображение. После отправки изображения с помощью PHP мы отправим изображение в сервисы reSmush.it и получим оптимизированную версию нашего изображения.
<form method="post" enctype="multipart/form-data">
<p><input type="file" name="image" accept="image/*" /></p>
<input type="submit" name="submit" value="Submit">
</form>
Здесь мы добавили кнопку ввода и отправки файла. Мы также использовали атрибут, accept="image/*"
который позволяет выбирать только файлы изображений.
Сжатие изображений для веб-сайта в PHP
Теперь нам нужно взаимодействовать с API reSmush.it. Мы собираемся написать код, который выполняет следующие шаги.
- Загрузите изображение на наш сервер.
- Отправьте загруженное изображение в конечную точку API reSmush.it.
- Получает путь оптимизированного изображения.
- Сохраните эту оптимизированную версию на нашем сервере, заменив исходное изображение.
Прежде чем продолжить, убедитесь, что на вашем сервере включено расширение cURL.
<?php
if (isset($_POST['submit'])) {
//allowed file types
$arr_file_types = ['image/png', 'image/gif', 'image/jpg', 'image/jpeg'];
if (!(in_array($_FILES['image']['type'], $arr_file_types))) {
die('Only image is allowed!');
}
if (!file_exists('uploads')) {
mkdir('uploads', 0777);
}
move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/'. $_FILES['image']['name']);
// optimize image using reSmush.it
$file = getcwd(). '/uploads/'. $_FILES['image']['name'];
$mime = mime_content_type($file);
$info = pathinfo($file);
$name = $info['basename'];
$output = new CURLFile($file, $mime, $name);
$data = array(
"files" => $output,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.resmush.it/?qlty=80');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if (curl_errno($ch)) {
$result = curl_error($ch);
}
curl_close ($ch);
$arr_result = json_decode($result);
// store the optimized version of the image
$ch = curl_init($arr_result->dest);
$fp = fopen(getcwd(). '/uploads/'. $name, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
echo "File uploaded successfully.";
}
?>
В приведенном выше коде я установил рекомендуемое значение качества «80». Вы можете изменить это число на большее или меньшее. Мы храним изображения внутри uploads
каталога. В вашем случае вы можете настроить этот каталог.
Надеюсь, вы понимаете, как сжимать изображения для веб-сайта на PHP с помощью reSmush.it. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.
Статьи по Теме
- TinyPNG сжимает изображения с помощью PHP
- Руководство по загрузке и сжатию изображений в Laravel
- Оптимизация изображений с помощью пакета artisansweb / image-optimizer