Как перевести изображение в 8bit grayscale и максимально сжать его без потери качества при загрузке?
Доброе утро
Решил при загрузке изображений на сервер, переводить их в 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();
}