Potřebuji z obrázku,který je uložen v databázi MySQL vytvořit náhled. V referenci jsem si našel, že se to dělá pomocí imagecopyresized, ale ta potřebuje jako vstup obrázek, který vytvořím pomocí funkce imagecreatefromjpeg. Ale ta potřebuje jako parametr platný file stream. A ten nevím jak z toho výstupu z databáze vytvořit. Zkoušel jsem třeba FOpen($zaznam['obrazek'],"r"], ale to nejde.
Díky za help.
Fórum › PHP
Zmenšení obrázku
No asi by to šlo jen změněním výšky a šířky obrázku v tagu 'img' a nebo ten náhled udělat tak, že si v graf. programu obrázek zmenín a potom pomocí javascriptu a php ho můžes ve skutečné velikosti zobrazovat v sam. okně a ne v samostatné stránce...
Obe moznosti samozrejme vim, ale to mi nepomuze. To prvni reseni je pekne kdyz obrazek bude jeden, ale kdyz tech nahledu bude 50 a kazdy obrazek se bude tahat v plne velikosti, tak z toho uzivatel vyroste. A ta druha - to je to cemu chci predejit - aby uzivatel musel vkladat dva obrazky.
Jedine co me napada je to cele zapsat do docasneho souboru a pak to znova otevrit. Ale me se do toho nechce :nn:
Jak pades?t? Nap??e? jeden obecnej JavaScript pro otev?en? obr?zku v okn? po kliknut? na jeho n?hled a pomoc? PHP to p?i?ad?? od jednoho (zm?n?n? hodnoty v tagu img) k druh?mu(obr?zek ve skute?n? velikosti)...
Ne, tys to asi nepochopil. V databazi bude ulozen obrazek dejme tomu 640*480, ktery se bude v plne velikosti zobrazovat jen na strance veci, kterou ma ten obrazek reprezentovat. A v prehledu tech veci se budou zobrazovat nahledy treba 100*75. Aby to melo smysl, tak se musi velikost obrazku zmenit jiz na serveru, jinak by je uzivatel musel vsechny stahovat k sobe na pocitac a tam bi je prohlizec jiz zobrazil jako 100*75.
BTW, uz se mi to povedlo zprovoznit. Jen ten kod trochu zacistim a hodim to do Skriptu :)
Uz to je hotovy a implementovany do projektu ;)
Tim zacistenim jsem myslel smazani zbytecnych prikazu, okomentarovani a vlozeni prikazu jako fclose()
Do Skriptu to dam upravenou verzi oprostenou od veci specifickych pro muj eshop.
CommanderZ napsal:
Uz to je hotovy a implementovany do projektu ;)
Tim zacistenim jsem myslel smazani zbytecnych prikazu, okomentarovani a vlozeni prikazu jako fclose()
Do Skriptu to dam upravenou verzi oprostenou od veci specifickych pro muj eshop.
Cus, muzes mi pls ten kod poslat na email neco podobneho nemam a nechce se mi to psat.
http://scripty.programujte.com/viewtopic.php?p=122#122 :ok:
Díky.
Hah, pri tech presunech zmizel nekde v eteru. ted bohuzel nemam cas na to abych ten kod znova zacistil, okomentaroval a vubec upravil pro prezenttovani na webu, takze tady je
az budu mit cas, tak ho zase hodim upraveny do skrptu.
<?php
//bezpecnostni rezim
$rezim=0;
//includy
include "func_pripojeni.php";
include "func_login.php";
include "konfigurace.php";
//nacteni GET parametru
$id = @$_GET["id"];
$v = @$_GET["v"];
$x = @$_GET["x"];
$y = @$_GET["y"];
//v je nepovinne, kdyz neni, tak ho vytvorime
if (!IsSet($v)) $v="0";
//vyzvedne z databaze udaje o obrazku
$dotaz="SELECT * FROM zbozi WHERE ID=$id";
$odpoved=@mysql_query($dotaz) or die ("<font color=red><b>Selh?n? spolupr?ce s datab?z?</b></font><br>");
while ($zaznam=MySQL_Fetch_Array($odpoved))
{
//nacte data z databaze
$typ=$zaznam["obrazek_typ"];
$velikost=$zaznam["obrazek_vel"];
$obrazek_nazev=$zaznam["obrazek_nazev"];
//odesle patricne hlavicky
header("Content-type: $typ");
header("Content-length: $velikost");
//header("Content-Disposition: attachement; filename=$obrazek_nazev");
header("Content-Description: PHP Generated Data");
if($v==1)
{
//vygeneruje docasne jemno souboru
$tmpjmeno = tempnam("", "tmp_obrazek");
//zmeni priponu docasneho souboru
$tmpjmeno=substr($tmpjmeno,strlen($tmpjmeno)-3,3)."jpg";
//vytvori docasny soubor
$tmp=FOpen($tmpjmeno,"w");
//zapise obrazek do docasneho souboru
fputs($tmp,$zaznam["obrazek"]);
// zasle informaci, ze se jedna o obrazek
header('Content-type: image/jpeg');
//nahraje obrazek
$obr2=imagecreatefromjpeg($tmpjmeno);
//zjisti vysku a sirku a dosadi do promennych
list($sirka, $vyska) = getimagesize($tmpjmeno);
//ulozi opriginalni vysku a sirku
$sirkao=$sirka;
$vyskao=$vyska;
//urci aspect ratio
$sirkam = $zobrazeni_eshop_nahled_x / $sirka;
$vyskam = $zobrazeni_eshop_nahled_y / $vyska;
//urci rozmery obrazku
if($vyskam>1) $vyskam=1;
if($sirkam>1) $sirkam=1;
if($vyskam>$sirkam)
{
$sirka=$sirka*$sirkam;
$vyska=$vyska*$sirkam;
}
else if($vyskam<$sirkam)
{
$sirka=$sirka*$vyskam;
$vyska=$vyska*$vyskam;
}
if($vyskam==$sirkam)
{
$sirka=$sirka*$sirkam;
$vyska=$vyska*$sirkam;
}
//zaokrouhli velikost na cele pixely
$sirka = round($sirka);
$img_new_h = round($sirka);
// vytvori obrazek pro nahled
$thumb = imagecreatetruecolor($sirka, $vyska);
//Zzmensi a nakpiruje do nahledu
imagecopyresized($thumb, $obr2, 0, 0, 0, 0, $sirka, $vyska, $sirkao, $vyskao);
//zavre a smaze docasny soubor
fclose($tmp);
unlink($tmpjmeno);
//vypise obrazek na standartni vystup
print imagejpeg($thumb);
}
if(IsSet($x)&&IsSet($y))
{
//vygeneruje docasne jemno souboru
$tmpjmeno = tempnam("", "tmp_obrazek");
//zmeni priponu docasneho souboru
$tmpjmeno=substr($tmpjmeno,strlen($tmpjmeno)-3,3)."jpg";
//vytvori docasny soubor
$tmp=FOpen($tmpjmeno,"w");
//zapise obrazek do docasneho souboru
fputs($tmp,$zaznam["obrazek"]);
// zasle informaci, ze se jedna o obrazek
header('Content-type: image/jpeg');
//nahraje obrazek
$obr2=imagecreatefromjpeg($tmpjmeno);
//zjisti vysku a sirku a dosadi do promennych
list($sirka, $vyska) = getimagesize($tmpjmeno);
//ulozi opriginalni vysku a sirku
$sirkao=$sirka;
$vyskao=$vyska;
//urci aspect ratio
$sirkam = $x / $sirka;
$vyskam = $y / $vyska;
//urci rozmery obrazku
if($vyskam>1) $vyskam=1;
if($sirkam>1) $sirkam=1;
if($vyskam>$sirkam)
{
$sirka=$sirka*$sirkam;
$vyska=$vyska*$sirkam;
}
else if($vyskam<$sirkam)
{
$sirka=$sirka*$vyskam;
$vyska=$vyska*$vyskam;
}
if($vyskam==$sirkam)
{
$sirka=$sirka*$sirkam;
$vyska=$vyska*$sirkam;
}
//zaokrouhli velikost na cele pixely
$sirka = round($sirka);
$img_new_h = round($sirka);
// vytvori obrazek pro nahled
$thumb = imagecreatetruecolor($sirka, $vyska);
//Zzmensi a nakpiruje do nahledu
imagecopyresized($thumb, $obr2, 0, 0, 0, 0, $sirka, $vyska, $sirkao, $vyskao);
//zavre a smaze docasny soubor
fclose($tmp);
unlink($tmpjmeno);
//vypise obrazek na standartni vystup
print imagejpeg($thumb);
}
else
{
print $zaznam["obrazek"];
}
}while(false);
?>
Prosím, můžete mi objasnit jazykovou konstrukci:
while(podminka){
...
}while(false);
Jestli tomu dobře rozumím, tak se tím docílí vykonání bloku za while(podminka) jen jednou?
Spravny postreh. Ta konstrukce je tam, jelikoz fetch array se pouziva vetsinou prave v cyklu, protoze vetsinou hrozi ze by vysledku mohlo byt vic. To ovsem neni tento pripad (obrazky jsou volany pod jednoznacnym ID). V tomto pripade by tam opravdu vubec byt nemusela.
na tohle primo ne, ale pracuju na univerzalni tride pro praci s obrazky, hodim tam to co zatim mam - snad jedine co mi chybi je prikaz pro upraveni obrazku, to mozna stihnu udelat jeste dneska vecer.
Moc děkuji za to zmenšování obrázků moc mi to pomohlo a chtěl bych se zeptat jestli někdo nevý jak po tom zmenšení obrázku ještě obrázek oříznout, aby se například obrázky na výšku na náhledu ořízli ty horní okraje tak aby se zobrazil obrázek na šířku
napsal:
Plz, muzete mi objasnit jazykovou konstrukci:Jestli tomu dobre rozumim, tak se tim docili vykonani bloku za while(podminka) jen jednou?
while(podminka){
...
}while(false);
Ne, celé je to samozřejmě nesmysl. To co je tam ve skutečnosti napsáno je toto:
while (podminka) {
...
}
while (false)
;
Takže to není jedna konstrukce, ale dvakrát normální while, přičemž ten druhý je zbytečný, nesmyslný a nic nedělá. A autor by si měl zopakovat základy jazyka :smile1:
To Matej Zabsky : To jako generuješ ten náhled při každém přístupu? Co takhle si ho vždycky uložit a při dalších požadavcích na už generovaný náhled použít ten uložený místo nového generování? Takhle to dělají velcí kluci, aby jim server nevybouchl ;)
joe napsal:
To Matej Zabsky : To jako generuješ ten náhled při každém přístupu? Co takhle si ho vždycky uložit a při dalších požadavcích na už generovaný náhled použít ten uložený místo nového generování? Takhle to dělají velcí kluci, aby jim server nevybouchl ;)
Sorry, uz to jsou dva roky, naprosto si nepamatuju, ze jsem kdy neco takoveho psal .)
Ale rozhodne delat nahledy pri kazdem pristupu je naprosta blbost.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zmenšení obrázku — založil Petr
Uložení obrázku po zmenšení — založil TomasUL
Funkce na zmenseni obrazku — založil desik
Zmenšení obrázku - funguje jen pro .jpg :-( — založil roman
Zmenšení řetězce? — založil DjeFFeCt
Moderátoři diskuze