2016-07-29 31 views
2

Ich habe eine Zeichenfolge Bild (PNG), die ich in eine Bild-Ressource mit imagecreatefromstring() konvertieren kann. Ich weiß, ich kann es mit imagepng() komprimieren, aber ich würde gerne weiter mit Optipng gehen. Optipng nehmen Sie eine Datei als Eingabe.Verwenden Sie externes Programm in PHP auf einem In-Memory-Bild

Wie kann ich Opting oder ein anderes Kommandozeilenwerkzeug in PHP auf einem In-Memory-Image verwenden? Schreiben auf die Festplatte ist das Bild zuerst keine Option.

+1

Nur mit gemeinsam genutzten Speicher, aber das hat von beiden Seiten unterstützt werden (dh ohne die richtigen Techniken, zwei Prozesse können ihr Gedächtnis nicht teilen.). Sie können nach "Shared Memory" googlen, um mehr darüber zu erfahren. –

Antwort

1

Sie sollten es an einem temporären Ort speichern, erforderliche Operation durchführen und es bei Bedarf wieder in die Zeichenfolge lesen. -Code unten können Sie Daten auf temporäre Datei speichern:

$tmp = tempnam(sys_get_temp_dir(), 'tmp_img') . '.png'; 
    file_put_contents($tmp, $data); 

    $command = "optipng -o7 ${tmp}>/dev/null; echo $?"; 
    $retCode = shell_exec($command); 
    if ($retCode == 0) { 
     $data = file_get_contents($tmp); 
    } else { 
     die("error"); 
    } 
+1

Er sagte ausdrücklich, "zuerst auf die Festplatte schreiben ist keine Option" ... –