Сжатие png

sanu0074

Новичок
Есть библиотека pngquant, которая позволяет сжимать изображения в формате png на лету, это показано на php.net. Но как ею воспользоваться? Как установить pngquant на сервер windows server 2008 r2 sp1?
 

Andkorol

Новичок
Там в архиве обычный .exe вроде.
Про использование вопрос не понял – на php.net точно такой же пример, как и на сайте разработчиков. Прям так же и использовать.
 

sanu0074

Новичок
Там в архиве обычный .exe вроде.
Про использование вопрос не понял – на php.net точно такой же пример, как и на сайте разработчиков. Прям так же и использовать.
Про использование, я имею ввиду, чтобы функция compress_png() была доступна в скрипте, достаточно запустить pngquant.exe? или что-то нужно подключать в php.ini или еще где-то...
 

Andkorol

Новичок
Ну пример внимательно посмотри уже – в нем же показано определение функции compress_png().
 

sanu0074

Новичок
Я об этом: Call to undefined function compress_png()
что нужно сделать чтобы функция работала? не просто же запустить exe файл pngquant'a
 

sanu0074

Новичок
Запустил pngquant.exe на сервере, поместил картинку для теста в корень, запускаю скрипт:
PHP:
function compress_png($path_to_png_file, $max_quality = 90)
{
    if (!file_exists($path_to_png_file)) {
        throw new Exception("File does not exist: $path_to_png_file");
    }
    $min_quality = 60;
    $compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg($path_to_png_file));
    if (!$compressed_png_content) {
        throw new Exception("Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?");
    }
    return $compressed_png_content;
}
$read_from_path = "pic.png";
$save_to_path = "compressed_file.png";
$compressed_png_content = compress_png($read_from_path,60);
file_put_contents($save_to_path, $compressed_png_content);
Получаю:
Fatal error: Uncaught exception 'Exception' with message 'Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?'
Stack trace: compress_png('pic.png', 60) #1 {main} thrown in
Именно об этом я и говорил когда спрашивал как установить pngquant...
 

Absinthe

жожо
Что ты видишь, когда ты запускаешь эту дрянь из командной строки под тем же пользователем?
 

Andkorol

Новичок
Именно об этом я и говорил когда спрашивал как установить pngquant...
Именно об этом ты бы говорил, если бы всё это находилось в твоем самом первом посте.
мельком появляющуюся и пропадающую командную строку
Это как понимать..?
 

sanu0074

Новичок
Вот то что в этой командной строке содержится:
pngquant, 2.1.1 (February 2014), by Greg Roelofs, Kornel Lesinski.
Compiled with libpng 1.6.3; using libpng 1.6.3.

usage: pngquant [options] [ncolors] [pngfile [pngfile ...]]

options:
--force overwrite existing output files (synonym: -f)
--nofs disable Floyd-Steinberg dithering
--ext new.png set custom suffix/extension for output filename
--output output path, only if one input file is specified (synonym: -
o)
--speed N speed/quality trade-off. 1=slow, 3=default, 11=fast & rough
--quality min-max don't save below min, use less colors below max (0-100)
--verbose print status messages (synonym: -v)

Quantizes one or more 32-bit RGBA PNGs to 8-bit (or smaller) RGBA-palette
PNGs using Floyd-Steinberg diffusion dithering (unless disabled).
The output filename is the same as the input name except that
it ends in "-fs8.png", "-or8.png" or your custom extension (unless the
input is stdin, in which case the quantized image will go to stdout).
The default behavior if the output file exists is to skip the conversion;
use --force to overwrite.

C:\pngquant-windows>
 

sanu0074

Новичок
когда перетягиваеш файлы на *.bat файлы то кодирование работает, суть в том, как правильно написать команду в shell_exec()
 

sanu0074

Новичок
из командной строки так работает: pngquant --force --verbose --quality=45-85 pic.png
как правильно написать команду в shell_exec()?
 

hell0w0rd

Продвинутый новичок
поставь virtualbox и прекращай насиловать мозг себе и людям;)
 
Сверху