Autor Zpráva
Andy
Profil *
Mam nasledovny kod na zobrazenie nahladu obrazku (obr_vnahlad.php):
if ((string)$_REQUEST["id"]<>'') $id=eregi_replace('[^0-9]', '', $_REQUEST['id']); else $id="46"; //vyber podla id

$nacti=mysql_query("SELECT letak, letak_velkost, letak_typ, letak_nazov, letak_sirka, letak_vyska FROM ac_akce WHERE id = '$id' "); //vyber obr a info o obr z databaze

if (!mysql_num_rows($nacti)==1) die ("Nemáme takový obrázek");
$row = mysql_fetch_assoc ($nacti);
$typ=$row["letak_typ"];
$velikost=$row["letak_velkost"];
$nazov=$row["letak_nazov"];
$orig_width=$row["letak_sirka"];
$orig_height=$row["letak_vyska"];

//Hlavicky
header("Content-type: $typ");
header("Content-length: $velikost");
header("Content-Disposition: attachement; filename=$nazov");
header("Content-Description: PHP Generated Data");

// Zacina operacia zmensenia obr
$filename = $row["letak"]; /* keby sem dam echo $row["letak"] a funkciu ukoncim, obrazok sa zobrazi spravne, avsak chcem ho zmensit pre nahlad.*/
$percent = 0.1; // pomer zmensenia v percentach

// definovanie novych rozmeov
$newwidth = $orig_width * $percent;
$newheight = $orig_height * $percent;


$image_p = imagecreatetruecolor($newwidth, $newheight);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $orig_width, $orig_height);

// Zobrazenie
imagejpeg($image_p, null, 100); //100% kvalita
imagedestroy($image_p);



No vysledok je len ten, ze sa zobrazi sice velkostou spravny ale iba cierny stvorec.. Teda nahlad jpg sa nezobrazi.

Vidite v tom niekde chybu? Dakujem za radu..
Cargas
Profil
imagedestroy($image_p);
imagedestroy($image);

zkus to takhle , ale nejsem si vubec jist vysledkem
Musilda
Profil
Chyba bude asi v imagejpeg.
Zřejmě by tam mělo být
imagejpeg($image_p, "název_nového_obrázku, 100);
imagedestroy($image_p);
a chybí :
imagedestroy($image);
jak píše Cargas
AM_
Profil
To na 99% řešením nebude, obrázek stejně při ukončení PHP v paměti zanikne, a na výstup to těžko může mít nějaký vliv. Název_nového_obrázku by znamenal, že chceš obrázek uložit do souboru, nikoli na výstup, to máš asi dobře.

Zkusil jsi si vypsat různé proměnné (např. print_r($row))? Musíš na to samozřejmě na chvíli vyřadit header() funkce. A mám takový pocit, že content-length přidává server automaticky.
Andy
Profil *
Zkusil jsi si vypsat různé proměnné (např. print_r($row))? Musíš na to samozřejmě na chvíli vyřadit header() funkce. A mám takový pocit, že content-length přidává server automaticky.

Vypis:
Array ( [letak] => ˙Ř˙ŕJF......   .......bł˙Ů [letak_] =>  [letak_typ] => image/jpeg [letak_nazov] => 200109_600.jpg [letak_sirka] => 593 [letak_vyska] => 841 )

Tu nechapem preco vypisal
 [letak_] =>
namiesto
 [letak_velkost] => 130593
.
Ale na spracovanie obrazku by to namalo mat vplyv.


Nemoze to mat nieco spolocne s tym ako ukladam obr do databaze? Pouzivam upravny script z..vlastne neviem z kadial.. ale je tam taketo nieco pred ulozenim:

// poslaný soubor splňuje všechna požadovaná kritéria a mohu ho nahrát do tabulky obrazek
      $binFile=str_replace(";", "", $binFile_tmp);
// v tomto případě poněkud paranoidní bezpečnostní opatření - odstraním všechny možné výskyty ; z nahrávaného souboru
      $obrazek = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
AM_
Profil
Hlavně jak jsem říkal, hlavička content-length ti bude působit jenom potíže, je zbytečná, protože apache jí posílá sám od sebe. Ty takhle pošleš velikost 0 (protože z nějakého důvodu, který je divný i mě, si jí to z databáze nevytáhne), takže prohlížeč teoreticky uzavře spojení hned po přečtení hlavičky.
Andy
Profil *
nefunguje.. :-(
AM_
Profil
Ok. tak si vypiš všechny důležité proměnné, zkus skriptem jen načíst a zobrazit původní obrázek (bez copyresampled)... vždycky, když narazíš na chybu, musíš se jí snažit co nejvíc izolovat, hledat, na kterém řádku se to chová, jak nemá, a ne hledět na 40 řádků kódu s tím že "tam někde něco nefunguje"... Vypsal sis třeba newwidth a newheight?
Andy
Profil *
vypiš všechny důležité proměnné, zkus skriptem jen načíst a zobrazit původní obrázek (bez copyresampled)..

Skusal som.. Ak dam miesto obrazku z databaze
$filename = $row["letak"]
normalne obrazok zo zlozky
$filename = 'test.jpg';
, tak to funguje spravne..
Nema sa ten obrazok z databeze este nejako spracovat?

Ked dam iba vypis
echo $row["letak"] 
, tak sa obr. zobrazi normalne..
Andy
Profil *
Naozaj nikoho nenapada ako to riesit?? :-(((

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: