2016-09-06 2 views
0

У меня есть сомнения. Есть ли проблема, если я заставляю imagejpeg сохранять файл .png? Как и в этом примере:Force imagejpeg to .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?

+0

Нет особых проблем с сохранением JPEG с расширением 'png', но почему бы просто не использовать расширение' jpg' вместо этого? Просто добавив другое расширение файла, вы не измените тип файла, который вы создаете. – iainn

+0

Использование imagejpeg всегда делает файл JPEG - даже если вы назовете его blabla.doc. Размер намного меньше из-за низкого качества. –

+1

Проблема PNG может быть сжата настолько сильно из-за специфики формата. Если вам нужен меньший размер, вам нужно использовать JPEG со всем, что подразумевается. – apokryfos

ответ

1

Ваш принуждая только имя файла создаваемого файла. Получившийся файл будет jpg со всеми его свойствами. Вы не получите сжатый png-файл, если используете метод imagejpeg().

Вам необходимо понять разницу в обоих форматах. В то время как jpg представляет собой сжатый формат, который теряет информацию об изображении при сжатии, png представляет собой формат без потерь. png также имеет уровень сжатия, но поскольку информация об изображении не уничтожена, она будет больше как файл jpg.

Если вы используете imagepng($image, $filename, 9), вы получаете файл png с наилучшим сжатием.

+0

Теперь я понимаю. Спасибо!Как я уже сказал, если я использую imagepng с фильтром качества $, я получаю только около -20kb. Мне нужно больше, потому что мой сайт генерирует около 50 г/день изображений. Что вы скажете о методе 2? Я вижу, что pngquant - очень хорошее решение, но оно не работает, если я создал такую ​​функцию, как указано выше. Есть ли способ создать imagepng как tmp_file? Поэтому я могу отправить его функции pngquant? –

+0

Есть несколько полезных примеров [здесь] (https://pngquant.org/php.html). –