@KarambyG

Как сжать изображение PNG без изменение типа MIME?

Итак, я всегда сжимал изображения jpeg так:
$url = "тут url PNG картинки";
$image = imagecreatefromJPEG($url);
imageJPEG($image, $path, 75);


Возникла необходимость изменить png картинку, использую функции для png:
$image = imagecreatefromPNG($url);
imagePNG($image, $path, 7);


Проблема в том, что функция imagePNG позволяет ставить размер сжатия только в диапазоне 1-9, а не 1-99 (как в imageJPEG). А такой размер сжатия почти ничего не меняет. Если у меня размер изображения был 1.3 мб, то станет 1.25. Такое себе сжатие. Функция imageJPEG сжимает в 10 раз лучше.

Я конечно нашёл решение:
$image = imagecreatefromPNG($url);
imageJPEG($image, $path, 75);


В итоге у меня получается хорошо сжатый файл png, но mime-тип этой картинки jpeg.
И возникает 2 вопроса:
1. Ничего страшного, когда расширение файла одно, а mime-тип другое? Может это как-то отразится на SEO, или может в каких-то браузерах такие картинки перестанут открываться? Или ещё что-то?
2. Есть ли иной способ, хорошо сжать PNG изображение, и получить при этом mime/png ?
  • Вопрос задан
  • 165 просмотров
Решения вопроса 3
@Everything_is_bad
В итоге у меня получается хорошо сжатый файл png, но mime-тип этой картинки jpeg.
потому в итоге у тебя получился jpeg. Чтобы понимать почему jpeg и png по разному сжимаются, надд почитать про эти форматы, кратко jpeg для фотокачества, png где много однородных областей (jpeg тут будет давать артефакты)
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JPEG - сжатие с потерями. Если сравнить изображение из исходного и сжатого файлов, то они не совпадут.
PNG - сжатие без потерь. Файл восстанавливается в точности таким, каким был.
Соответственно, размер JPEG уменьшается с потерей информации, размер PNG особо не уменьшить, поскольку информация не теряется.
Хотите сжать PNG - уменьшайте его размер и/или глубину цветности, то есть самостоятельно уменьшайте количество информации в файле.
Ответ написан
Комментировать
15432
@15432
Системный программист ^_^
PNG - сжатие без потерь. Итоговое изображение не отличается от исходного. JPEG - теряете в качестве, вплоть до полного треша, но зато, как вы пишете "сжимает в 10 раз лучше".

Если очень хочется, после пережатия в JPEG с, допустим, качеством 50, можете обратно перевести в PNG, может быть получите хотя бы двукратное уменьшение размера. Но лучше оставить JPEG
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Можно "сжать" png
Для этого понадобятся спец. утилиты из категории "png optimizer", одним GD тут не обойтись.
https://habr.com/ru/articles/63528/

https://github.com/imagemin/pngout-bin
https://pngquant.org/
https://github.com/funbox/optimizt
и аналоги

то что png можно "сжать" практически без визуальных потерь можете проверить онлайн на сервисе https://tinypng.com/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы