2012-03-30 8 views
3

Ich erstelle PNG-Datei mit Kairo-Erweiterung von PHP. Das Bild enthält einen Hintergrund und einen Text. Jetzt möchte ich diese Bilder per PHP komprimieren, nachdem es von cairo erzeugt wurde. Gibt es eine Bibliothek, um das zu tun?PNG-Dateien komprimieren in PHP

Ich fand pngcrush Werkzeug. Aber es ist ein Kommandozeilenwerkzeug. Ich möchte nicht anrufen system aufrufen. Wenn es keine PHP-Lösung gibt, würde eine C-Lösung ausreichen. In diesem Fall werde ich eine PHP-Erweiterung machen.

Ich habe this related Frage gelesen. Aber es gibt keine Antwort darin.

Antwort

1

ich einen Blick auf PngOptimizer nehmen würde. Sie können die Quelle dafür unten auf der Seite finden, und es hat auch eine getrennte CLI-Version.

Das einzige Problem ist, dass die Quelle C++ ist, nicht ANSI C. Ich habe noch nie eine PHP-Erweiterung gemacht, also weiß ich nicht, ob es einen Unterschied macht.

0

Für C-Code werfen Sie einen Blick auf ImageMagick. Es sieht so aus, als ob es eine PHP Erweiterung gibt.

+0

Lesen Sie http://stackoverflow.com/questions/7462827/phpimagick-png-compression es funktioniert nicht so. –

+0

Aha! Es sieht aus wie ein PHP-Problem und kein ImageMagick-Problem. Sie könnten entweder das Flag zur Erweiterung PHP-ImageMagick hinzufügen oder ein eigenes erstellen. [MagickCore] (http://www.imagemagick.org/script/magick-core.php) hat ein Beispiel (nach 'example' suchen), wie man ein gif in einen png Code umwandelt. – RunHolt

+0

Wenn Sie die zugehörige Frage sehen, hat OP es mit PHP versucht, aber ich habe es auch in der Befehlszeile versucht. In beiden Fällen erreiche ich nicht mehr als 10% Kompression. –

1

können Sie verwenden imagepng() ...

//If you don't already have a handle to the image and it's just on the file system... 
$im = imagecreatefrompng("yourGenerateFile.png"); 
$quality = 5; //0 - 9 (0= no compression, 9 = high compression) 
imagepng($im, 'file/to/save.png', $quality); //leave out filename if you want it to output to the buffer 
imagedestroy($im); 
+0

Ich habe schon einen Kairo-Griff aber keinen Gd-Griff. Ich werde deinen Code ausprobieren und dich wissen lassen. –

+0

Die Qualität ist nicht erhalten. Die Transparenz hat komplett verloren! –

+0

Für die Transparenz verwenden: 'imageAlphaBlending ($ im, true); imageSaveAlpha ($ im, true); ' wie hier gesagt: http://php.net/manual/en/function.imagecreatefrompng.php#43024 –