Ответ 1
TinyPNG использует pngquant.
Pngquant имеет возможность установить желаемое качество, подобное JPEG. Вы можете запустить что-то вроде:
<?php system('pngquant --quality=85 image.png'); ?>
На веб-сайте Pngquant есть пример кода, показывающий, как использовать pngquant из PHP.
Для JPEG вы можете применить без потерь jpegcrush.
JpegMini (коммерческий) и jpeg-archive (бесплатно) являются потерями и могут автоматически найти минимальное качество для JPEG.
В PHP вы можете приблизительно оценить, насколько JPEG был сжат, наблюдая, как изменяется размер файла после повторного сжатия. Размер файла JPEG, сжатого с одинаковым или высоким качеством, не будет сильно изменяться (но потеряет визуальное качество).
Если вы повторно сжимаете JPEG и видите размер файла в два раза, сохраните повторно сжатую версию. Если вы видите только размер файла 10-20%, сохраните его.
Если вы сжимаете себя, используйте MozJPEG (здесь онлайн-версия).