Autor Zpráva
AM_
Profil
Zdravím,
tvořím skript pro generování cachovaných náhledů obrázků. Jedna ze situací tedy je, že je vyžádán náhled, který ještě není v cache; v tu chvíli bych potřeboval od funkce image[jpeg/gif/png], aby vytvořila obrázek do souboru i na výstup, ale ona evidentně umí jen jedno z toho. Lze ji nějak přinutit, aby se obrázek posílal i na výstup, nebo je jediné řešení ho uložit a pak fpasstrhu() poslat na výstup? přímé řešení by mohlo být rychlejší
Alphard
Profil
Nikde jsem to neviděl. A podle manuálu by to ani jít nemělo, jestli předáš něco jiného než null nebo správnou cestu, skončí to chybou. Trochu se tomu blíží tento úsek kódu
    // use output buffering to capture outputted image stream
    ob_start();
    imagejpeg($tmp_img);
    $i = ob_get_contents(); 
    // Save file
    $fp = fopen ($destImage,'w');
    fwrite ($fp, $i);
    fclose ($fp);

Já bych ale imagejpeg() použil asi dvakrát po sobě.
AM_
Profil
Alphard:
Já bych ale imagejpeg() použil asi dvakrát po sobě.
toho se bojím že by bylo nejnáročnější, musela by se dvakrát provádět komprese, to je si myslím rychlejší zapsat a přečíst soubor...

ten tvůj kód se mi ale líbí, takhle to udělat mě nenapadlo, to vyzkouším; mělo by to být nejrychlejší, obrázek se vygeneruje jen jednou a z paměti se pošle na disk i na výstup, lépe už to principielně nejde :) díky
Aichi
Profil
udelal bych to takto

header("Content-Type: image/png");

if (!file_exist($thumb_path_and_filename)) {
  //nacteni
  $im = imagecreatefromjpeg($original_path_and_filename);
  //zmenseni
  ...
  imagejpeg($im, $thumb_path_and_filename);
  
  header("Content-Length: " . filesize($thumb_path_and_filename));
  
  imagejpeg($im);
} else {
    header("Content-Length: " . filesize($thumb_path_and_filename));
  fpassthru($thumb_path_and_filename);
}

AM_
Profil
Aichi:
díky, ale toto (dvojí volání imagejpeg) již psal Alphard a to jsem zavrhl. Použil jsem obdobu jeho skriptu s output bufferem, to mi přišlo nejlepší.

Mimochodem, hlavička "content-length" není potřeba, server si tuto hlavičku generuje sám (a hlavně správně, takže psaním vlastní akorát riskuješ, že uděláš chybu a délku zkoníš). Naopak se tam hodí content-type :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: