Próbuję użyć algorytmu kompresji pngquant do kompresowania obrazów PNG w locie za pomocą WAMP. Zapewniają one PHP example, która (jak sądzę) ma używać command line binary for Windows, którą umieściłem w folderze system32
i mogę uzyskać dostęp z dowolnego miejsca w linii poleceń.Przykład PHP pngquant nie działa
Wziąłem ich przykład i prześledziłem problem do linii $compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg( $path_to_png_file));
. Uprośniłem go do var_dump(shell_exec('pngquant - < test.png'));
, ale wyprowadza on tylko pierwszych 5 znaków, mimo że wydaje się, że passthru('pngquant - < test.png');
wysyła prawidłowe ciągi do użytkownika. exec('pngquant - < test.png',$output); var_dump($output);
wydaje się również przechwytywać prawidłowy wynik, ale w postaci tablicy, której tak naprawdę nie wiem, jak przekonwertować z powrotem do pliku obrazu. Chcę przechwycić dane wyjściowe w zmiennej, aby móc użyć dalszych algorytmów kompresji i manipulacji i wysłać je do użytkownika jako plik do pobrania.
Przeczytałem na diferences between system() vs exec() vs shell_exec() vs passthru() vs proc_open() vs popen(). Powłoka Shell_exec() wydaje się być właściwym wyborem, jednak na stronie php.net jest napisane, że shell_exec()'s wysyła ciąg znaków. Czy to może być problem? Jak poprawnie przechwycić dane wyjściowe polecenia polecenia pngquant - < test.png
do zmiennej?
Po prostu mówiąc, obrazy PNG są już mocno skompresowane. Ale wciąż, ponownie przypisane pytanie +1. – Xorifelse
Jestem projektantem stron internetowych. Większość moich PNG i innych PNG projektantów, z którymi pracuję, może być skompresowana o 40% do 70% bez widocznego pogorszenia jakości przy użyciu tego algorytmu. Myślę, że to jest tego warte :) –
Czy znalazłeś rozwiązanie? – sanjihan