2010-01-03 3 views
11

Vor einer Weile habe ich einen PNG-Optimierungsdienst namens (ich glaube) "smush it" verwendet. Sie fütterte es einen Weblink und es gab eine Zip von allen PNG-Bildern mit ihren Dateigrößen schön, gut, smushed ...PNG-Optimierungstools

Ich möchte eine ähnliche Optimierung als Teil der Bild Upload-Prozess meiner Website zu implementieren; Kennt jemand eine vorhandene Bibliothek (vorzugsweise PHP oder Python), die ich dafür nutzen kann? Eine kurze Google hat mich auf mehrere Befehlszeilen-Stil-Tools hingewiesen, aber ich würde lieber nicht auf diese Route gehen, wenn möglich.

+2

Ich denke, mit PHP keine der beliebten Tools (optipng , pngcrush, et c.) Bindungen haben. ImageMagick (für PHP) und PIL (für Python) werden Sie irgendwo hinbringen, indem Sie die Ausgabeeinstellungen optimieren, aber die Befehlszeilenwerkzeuge sind stärker optimiert. –

Antwort

14

dieses Kommandozeilen-Tools ausführen

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB -brute -l 9 -max -reduce -m 0 -q IMAGE 
    optipng -o7 -q pngout.png 
    pngout pngout.png -q -y -k0 -s0 
    advpng -z -4 pngout.png > /dev/null 
+1

Hey, es ist schon 6 Jahre her, aber ich habe gemerkt, dass du online bist - das sind eine anständige Liste von Werkzeugen. Kannst du alle Kompressionswerkzeuge für png/jpg und ähnliches auflisten? Ich brauche nur eine Namensliste von dem was du verwendest/magst, da diese Tools gut sind Ich vermute du hast vielleicht etwas besseres in 6 Jahren gefunden :) Danke im Voraus. tolle Antwort. – S00

3

Solange Ihr PHP mit GD2 Unterstützung (durchaus üblich heutzutage) zusammengestellt:

<?php 
$image = imagecreatefromstring(file_get_contents('/path/to/image.original.png')); 
imagepng($image, '/path/to/image.smushed.png', 9); 

in jedes Bildformat Dies wird gelesen GD2 versteht (nicht nur PNG) und Ausgabe als maximale Kompression eines PNG gzipped ohne Qualitätsverlust.

Es könnte heute weniger nützlich sein als vor Jahren; Die meisten Bildbearbeitungsprogramme tun dies bereits, da das Gziping nicht so viel CPU-seitig kostet wie früher.

+0

Danke, aber ich bin auf der Suche nach etwas, das über das Gippen hinausgeht, dh Farbkorrektur und Gamma-Informationen entfernt. – Mathew

+0

Obwohl ich zustimme, gibt es neben der einfachen Komprimierung noch andere Optimierungstechniken. Das, was Sie fragen, ist nicht _optimizing_, sondern _destroying_ das hochgeladene Bild. – Mike

+0

Bah! Semantik! :) Als ein Punkt der Korrektheit allerdings: Was ich verlange, ist nicht das Bild in irgendeiner Weise zu zerstören, sondern das Bild wird optimiert, indem bestimmte Teile von (unnötigen) Informationen zerstört werden. – Mathew

2

Haben Sie schon von PNGCrush gehört? Sie können die Quelle, Teil von PNG and MNG Tools at SourceForge, auschecken und in Python transkribieren oder umbrechen.

+1

PNGcrush ist schneller als jede reine Python-Lösung jemals, und das Aufrufen von externen Programmen ist in Python einfach. Der offensichtlichste Nachteil ist, wenn Ihr Betriebssystem extrem hohe Kosten für die Erstellung eines neuen Prozesses hat, z. Windows. – Theran

+0

Ich bezweifle, dass das Erstellen eines neuen Prozesses für jeden Datei-Upload unabhängig vom Betriebssystem eine gute Idee ist. – Eric

2

Ich würde die Weisheit in Frage andere Brocken Wegwerfen (wie GAMA und ICCP), aber wenn es das ist, was Sie es ist ziemlich einfach zu tun, will PyPNG zu verwenden Brocken zu entfernen:

#!/usr/bin/env python 
import png 
import sys 

input=sys.stdin 
out=sys.stdout 

def critical_chunks(chunks): 
    for type,data in chunks: 
     if type[0].isupper(): 
      yield type,data 

chunks = png.Reader(file=input).chunks() 
png.write_chunks(out, critical_chunks(chunks)) 

die critical_chunks Funktion ist im Wesentlichen Ausfiltern aller außer den kritischen PNG-Chunks (der 4-Buchstaben-Typ für einen kritischen Chunk beginnt mit einem Großbuchstaben).

+0

Dies ändert nicht die ZLIB-Komprimierung, da es die Chunks unverändert durchlässt. –