Как перевести изображение в 8bit grayscale и максимально сжать его без потери качества при загрузке?

Рейтинг: 0Ответов: 0Опубликовано: 03.03.2023

Доброе утро

Решил при загрузке изображений на сервер, переводить их в 8-битную шкалу, чтобы они на выходе были ч/б-шными и одновременно сжимать их без особых потерь, т. е. чтобы пригодными они были только для веб. Существуют ли встроенные функции или какие-либо алгоритмы в php? Можно ли в такими инструментами обработать, скажем, переменную $img, в которой сохранёно изображение при загрузке?

Вопрос, наверное, выглядит чрезвычайно нубским, но как я не искал, комплексного решения не нашёл.

Нашёл только imagefilter($img, IMG_FILTER_GRAYSCALE), но не ясно что оно делает с картинкой, не накладывает ли какие-либо фильтры увеличивающие размер изображения?

И какой формат при этом будет предпочтительнее (обычные чёрно-белые фотографии «журнально-газетного» качества): .jpeg или .png?

Попытался применить фильтр, но никак. Как же вот это imagefilter($img, IMG_FILTER_GRAYSCALE) сюда впихнуть?

public function fileUpload($path)
{
    $fileTmpName = $_FILES['file']['tmp_name'];
    $image = getimagesize($fileTmpName);
    $extension = image_type_to_extension($image[2]);
    $path = 'public/images/uploads/' . uniqid() . $extension;
    $params = [
        'id' => null,
        'path' => '/' . $path,
    ]; 
    move_uploaded_file($fileTmpName, $path);
    $this->db->query('INSERT INTO `files` VALUES (:id, :path, strftime("%d.%m.%Y %H:%M"))', $params);
    return $this->db->getLastInsertId();
}

Ответы

Ответов пока нет.