Autor Zpráva
Pavel Vodnář
Profil *
Dobrý den, potřeboval by jsem poradit jak co nejjednodušeji vytvářet miniatury obrázků?

Miniatura se vytváří potom co byl obrázek nahrán na server? Děkuji Vám
johnl
Profil
Pavel Vodnář:
jak co nejjednodušeji vytvářet miniatury obrázků?
Třeba hledáním..

Hotový kód ti sem asi nikdo nepošle, leda že bys nabídnul nějakou odměnu, ovšem to patří do sekce Práce a zakázky.. Takže můj odkaz by ti mohl stačit.. ;-)
Pavel Vodnář
Profil *
No, chtěl by jsem to zkusit od začátku a dát nějak do kupy, potřebuji vědět kroky, které se musí udělat jak postupovat? děkuji
l564
Profil
Tak si vytvoř kopii fotek , a stáhni si free program ne změnu fotek a zmenši si fotky a nahraj je na web . Těžký ?
Pavel Vodnář
Profil *
l564:
No celkem to je těžký, alespoň pro mě;) dalo by se stim nějak pomoct? Díky
Pavel Vodnář
Profil *
Zkloubil sem dohromady tenot kód:

//  vytvoření miniatury 31

$typ = $_FILES['fupload']['type'];
$jmeno = $_FILES["fupload"]["name"]; //nazev obrazku
$velikost = $_FILES["fupload"]["size"];

echo $typ;
echo $jmeno;
echo $velikost;

$adresa = "../images/miniature".$jmeno; //adresa do které se uloži miniatura
$adresa_org = "./images/".$jmeno; //cesta k obrazku

$velikost = getimagesize($adresa_org); // zjištění rozměrů obrázků
$sirka = $velikost[0]; //přiřadí se šířka obrázku
$vyska = $velikost[1]; //přiřadí se výška obrázku
$tn_vyska = 80; //výška obrázku po zmenšení
$tn_sirka = $sirka*(80/$vyska); //aby se zachoval poměr stran vypočte se nová šířka

    $org = ImageCreateFromJpeg($adresa_org);
    $tn = ImageCreateTrueColor($tn_sirka+3,$tn_vyska+3); //ke zmenšenému obrázku přidáme "stín"
ImageCopyResampled($tn,$org,1,1,0,0,$tn_sirka,$tn_vyska,$sirka,$vyska); //zmešíme obrázek a uložíme do připravené složky
ImageJpeg($tn,$adresa);
ImageJpeg($tn);

ImageDestroy($tn);
ImageDestroy($org);




Snažim se vytvořit ve scriptu upload, ale píše mi to tuto chybu:

Warning: imagejpeg() [function.imagejpeg]: Unable to access ../images/miniatureObraz045.jpg in /var/www/web5/pridat-inzerat-upload.php on line 51

Warning: imagejpeg() [function.imagejpeg]: Invalid filename in /var/www/web5/pridat-inzerat-upload.php on line 51

Nevíte v čem můžu mít chybu? Děkuji Vám
AM_
Profil
Pavel Vodnář:
zřejmě nějaká chyba v cestě.

$adresa = "../images/miniature".$jmeno; //adresa do které se uloži miniatura
$adresa_org = "./images/".$jmeno; //cesta k

skoro to vypadá, že buď máš dvě složky ../images a ./images, nebo to máš popletené v kódu.
Pavel Vodnář
Profil *
mám složku images - ve které mám reálnou velikosti obrázku a v te složce images mám složku miniatury - mohlo by to být tím nebo něčím jiným? Děkuji Vám
AM_
Profil
Pavel Vodnář:
mám složku images - ve které mám reálnou velikosti obrázku a v te složce images mám složku miniatury
nic proti, ale ta věta moc nedává smysl. Máš jednu složku images nebo dvě? protože ./images a ../images není totéž.
//edit: už tu větu asi chápu, tj že máš jednu složku images. Zřejmě místo ../images máš mít taky ./images, .. znamená o adresář výš.
Pavel Vodnář
Profil *
Ano mam jdenu složku s názvem images v a té složce složku s názvem miniatury. Může být chyba v tomto? nebo je v něčem jiném? Děkuji Vám
Legáček
Profil
$adresa = "../images/miniature/".$jmeno;

Takhle by to být nemělo?
TomášK
Profil
Legáček:
Ne, je tam pořád navíc ta tečka.
$adresa = "./images/miniature/".$jmeno;
Petr__
Profil *
[#13] TomášK
Legáček narážel na to, že mu tam chybí to poslední lomítko, takže místo toho aby se mu ty miniatury vytvářely v adresáři "miniature", tak vytvářel miniatury a prefixem "miniature" přímo v adresáři images. Jde to vidět i z výpisu té chybové hlášky.
Navíc tam bude i chyba v cestě k tomu adresáři. Zatím nikdo neví, jak jsou vůči sobě umístěny ten soubor pro zpracování obrázku a samotný adresář "images"...
Pavel Vodnář
Profil *
Ano máte pravdu:
$adresa = "./images/miniature/".$jmeno;
je správně, už to vytváří miniatury z formátu jpeg, šlo by tam nějakým způsobem přidat aby to vytvářelo miniatury i z formátu giv, nebo png? Děkuji Vám
Pavel Vodnář
Profil *
Rovněž by jsem potřeboval ošetřit proč když načtu stránku s uploadem mi to vypisuje tyto chyby:

1) Warning: Division by zero in /var/www/web5/pridat-inzerat-upload.php on line 47

2) Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: './images/' is not a valid JPEG file in

3) Warning: imagecopyresampled(): supplied argument is not a valid Image resource in

4)
Warning: imagejpeg(): supplied argument is not a valid Image resource in

co dané chyby znamenají? Děkuji
xmark
Profil
Pavel Vodnář:
Ty hlášky jsou v angličtině, http://translate.google.com je kamarád. Aby se někomu tady chtělo s tím zalamovat, chtělo by to aspoň upřesnit, kterých řádků se ty hlášky týkají. Tvůj kód má 28 řádků, první chybová hláška je z ř. 47. Přinejmenším moje ochota s něčím radit klesá k nule.
Pavel Vodnář
Profil *
Nevím si rady s těmito chybovýma hláškama, které se načtou při načtení stránky - jak je odstranit? děkuji

1)Warning: Division by zero in /var/www/web5/pridat-inzerat-upload.php on line 43

2)Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: './images/' is not a valid JPEG file in /var/www/web5/pridat-inzerat-upload.php on line 45

3)Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /var/www/web5/pridat-inzerat-upload.php on line 46

4)Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 47

5)Warning: imagejpeg(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 48

6)Warning: imagejpeg(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 49

7)Warning: imagedestroy(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 51

8)Warning: imagedestroy(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 52


<?php

  if (isset($_FILES["fupload"]["name"]))  


{ 


  if ((is_uploaded_file($_FILES["fupload"]["tmp_name"])) && ($_FILES['fupload']['type']=="image/png" || $_FILES['fupload']['type']=="image/jpeg" || $_FILES['fupload']['type']=="image/jpg" || $_FILES['fupload']['type']=="image/gif" ))
               { 
               $name = $_FILES["fupload"]["name"]; 
               if (@move_uploaded_file($_FILES["fupload"]["tmp_name"], "./images/$name"))  
                 echo 'Soubor '.$name.' byl úspěšně nahrán';
                 else echo 'Nastala chyba'; 
               }  
		else echo "Obrázek musí být typu .jpg, .jpeg, .gif, .png";
		echo $_FILES['fupload']['type'];
		echo $_FILES["fupload"]["name"]; 
             }





//  vytvoření miniatury 30

$typ = $_FILES['fupload']['type'];
$jmeno = $_FILES["fupload"]["name"]; //nazev obrazku
$velikost = $_FILES["fupload"]["size"];

echo $typ;
echo $jmeno;
echo $velikost;

$adresa = "./images/miniature/".$jmeno; //adresa do které se uloži miniatura
$adresa_org = "./images/".$jmeno; //cesta k obrazku


$velikost = getimagesize($adresa_org); // zjištění rozměrů obrázků
$sirka = $velikost[0]; //přiřadí se šířka obrázku
$vyska = $velikost[1]; //přiřadí se výška obrázku
$tn_vyska = 150; //výška obrázku po zmenšení
$tn_sirka = $sirka*(150/$vyska); //aby se zachoval poměr stran vypočte se nová šířka

$org = ImageCreateFromJpeg($adresa_org);
$tn = ImageCreateTrueColor($tn_sirka+0,$tn_vyska+0); //ke zmenšenému obrázku přidáme "stín"
ImageCopyResampled($tn,$org,0,0,0,0,$tn_sirka,$tn_vyska,$sirka,$vyska); //zmešíme obrázek a uložíme do připravené složky
ImageJpeg($tn,$adresa);
ImageJpeg($tn);

ImageDestroy($tn);
ImageDestroy($org);

?>


xmark
Profil
Pavel Vodnář:
Ta první hláška znamená, že se snažíš dělit nulou, což v oboru reálných čísel nelze. Všechny další se odvíjí od toho.
Pavel Vodnář
Profil *
Aha, děkuji Vám - jak jí zabráním respektive pomůže nějaká podmínka?
Pavel Vodnář
Profil *
když opravím řádek 43 takto:
$tn_sirka = 120;


pak nedělím nulou a vypíše mi to tyto chyby při načtení stránky:


Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: './images/' is not a valid JPEG file in /var/www/web5/pridat-inzerat-upload.php on line 45

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 47

Warning: imagejpeg() [function.imagejpeg]: Unable to open './images/miniature/' for writing: Is a directory in /var/www/web5/pridat-inzerat-upload.php on line 48
˙Ř˙ŕ�JFIF������˙ţ�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ˙Ű�C�    $.' ",#(7),01444'9=82<.342˙Ű�C  2!!22222222222222222222222222222222222222222222222222˙Ŕ��d�x"�˙Ä����������� ˙Ä�µ���}�!1AQa"q2�‘ˇ#B±ÁRŃđ$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�„…†‡�‰Š’“”•–—�™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚáâăäĺćçčéęńňóôőö÷řůú˙Ä�������� ˙Ä�µ��w�!1AQaq"2�B‘ˇ±Á #3RđbrŃ $4á%ń&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚�„…†‡�‰Š’“”•–—�™š˘Ł¤Ą¦§¨©Ş˛ł´µ¶·¸ąşÂĂÄĹĆÇČÉĘŇÓÔŐÖ×ŘŮÚâăäĺćçčéęňóôőö÷řůú˙Ú� ��?�ůţŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ˙Ů
Warning: imagedestroy(): supplied argument is not a valid Image resource in /var/www/web5/pridat-inzerat-upload.php on line 52

Jak odstraním tyto chyby? Děkuji Vám
xmark
Profil
Pavel Vodnář:
Na řádku 43 dělíš nulou. Zamysli se, co z toho vyplývá.
Pavel Vodnář
Profil *
xmark:
Ano rozumím ale když ten řádek opravím takto

řádek 43 =
$tn_sirka = 120;
a nastavim mu pevnou sirku vypíše mi to chyby z #21

Co by ješte mohlo být špatně? Děkuji Vám
Tori
Profil
Pavel Vodnář:
Zkuste změnit postup, kterým hledáte chybu :) Tady by se dalo použít např.:
Kouknu na řádek, kde se dělí nulou. Nula je tedy hodnota proměnné $vyska. (Tady jste se dostal na scestí.)
Kouknu, kde je definovaná $vyska - čte se z nějakého pole. To pole vytváří funkce getimagesize(). Jelikož je to standardní funkce PHP (a ne moje vlastní), nebude chyba ve funkci, ale v tom, co dostane ke zpracování. Má dostat cestu k obrázku, takže to zkontroluji.
Zkusím si vypsat proměnnou $adresa_org: pokud neobsahuje jméno souboru, je chyba tam, kde se definuje proměnná $jmeno. Pokud obsahuje jméno souboru, zkusím použít absolutní cestu místo relativní.
Pavel Vodnář
Profil *
Tori:
Když zadám vypsat $adresa_org vypíše mi to: pouze ./images/ - to tedy znamená že chyba je tam kde se definuje $jmeno?
Darker
Profil
Pavel Vodnář:
Hmm. Tori má recht kámo. Programování vyžaduje určitý analitický schopnosti.
Teď k tomu, cos zatím spáchal.
Nemám nejmenší ponětí, proč soubor ukládáš (ř. 12) a pak znovu nahráváš... (ř. 39).
Změna stran v poměru:
       $width=/*SIRKA*/;
       $height=/*VYSKA*/;
       $max_rozmer=270;
       if($width>$max_rozmer){
        $height=$height/($width/$max_rozmer);
        $width=$max_rozmer;
       }
       if($height>$max_rozmer){
        $width=$width/($height/$max_rozmer);
        $height=$max_rozmer;
       }



Začal jsem psát dřív než vodnář napsal [#25]
Pavel Vodnář
Profil *
Dobrá děkuji za informace - teď mi to už při načtení stránky nevypisuje nic, ale dělá mi to chybku když se mi obrázek nahraje

pak mi to vypíše:

Ř˙ŕ�JFIF������˙ţ�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ˙Ű�C�••••    $.' ",#(7),01444'9=82<.342˙Ű�C  2!!

Moderátor Alphard: Zkráceno.

Co znamená tato chyba? Děkuji Vám
Alphard
Profil
Když ten obrázek vypisujete (ImageJpeg($tn);), musíte poslat správné hlavičky. Ty lze najít např. v manuálu u této funkce.
Pavel Vodnář
Profil *
Ano máte pravdu, už to ukládá miniatury jak má a pracuje "správně" ,

potřeboval by jsem poradit jak připravit na tyto uploadované obrázky DB

co by měla tato DB obsahovat ?


děkuji Vám
Pavel Vodnář
Profil *
Ještě sem se chtěl zeptat jak ošetřit když uživatel bude chtít nahrát obrázek ze stejným názvem? Děkuji Vám
Alphard
Profil
Pavel Vodnář:
Posledních pár dní se mi zdá, že je toto fórum prostředek k řešení veškerých vašich problémů. Několikrát vám byly doporučovány návody i manuály. Musíte si o PHP něco přečíst, když s ním chcete pracovat.

Když chcete ukládat obrázky do databáze, doporučuji http://www.linuxsoft.cz/article.php?id_article=420
Když se vyskytne nějaký problém, zkuste ho nejdříve vyřešit sám [#23]

[#29] Neměl by nastat problém, když budete ukládat do databáze, nabízí se identifikace podle id.

Pro úplnost dodávám, že časté řešení je ukládat obrázky jako soubory a v db mít jen údaje o nich.

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: