Заставить imagejpeg в.png
Я сомневаюсь. Есть ли проблема, если я заставлю imagejpeg сохранить файл.png? Как в этом примере:
imagejpeg($img,$_SERVER['DOCUMENT_ROOT']."/test.png",80);
Я хочу использовать этот метод, потому что я могу использовать $quality
фильтр. В этом методе у меня есть сохраненный файл.png размером около 25 КБ, но если я использую imagepng, мое изображение будет иметь размер около 200 КБ (я использовал уровень качества $ 0-9, но я не увидел никаких изменений, только -20 КБ), Я не хочу ошибаться, потому что мой сайт генерирует.png изображения каждую секунду.
Способ 2. Я пытался сжать изображения.png с помощью pngquant, но я не представляю, как это сделать, когда я использую функцию imagepng. Я пробовал что-то вроде этого, но это не работает, если я передаю изображение в функцию.
ob_start();
imagepng($img);
$png = ob_get_clean();
file_put_contents($_SERVER['DOCUMENT_ROOT']."/test.png", compress($png);
function compresss($img)
{
//...
}
В других случаях, если у меня есть $png = $_FILES['file']['tmp_name']
работает. Так есть ли способ сжатия с pngquant, или есть проблема, если я заставлю imagejpeg сохранить файл.png?
2 ответа
Вы заставляете только имя файла созданного файла. Полученный файл будет jpg со всеми его свойствами. Вы не получите сжатый png-файл, если используете imagejpeg()
метод.
Вы должны понимать разницу обоих форматов. В то время как jpg является сжатым форматом, который теряет информацию об изображении при сжатии, png является форматом без потерь. У png также есть уровень сжатия, но поскольку информация об изображении не уничтожается, он будет больше в виде файла jpg.
Если вы используете imagepng($image, $filename, 9)
Вы получаете файл PNG с лучшим сжатием.
Вы должны использовать imagepng()
вместо imagejpeg()
создать файл png.