Autor Zpráva
Wendy88
Profil *
Ahoj kluci,
dělám do školy jeden úkol. Měli sme udělat jenoduchý MVC a já sem si vymyslela že udělám databázi mých DVD filmů.
Už mi to skoro všecko funguje, ale eště mě teď napadlo, jestli by se ke každému filmu mohl přidat malý obrázek obalu. Jde to ještě teď dodělat? Jakože bych k těm filmům ještě přidala další sloupec a každému tam přidala tu fotku?
radvis
Profil *
Do databáze přidáš tabulku "obrazek" a tam budeš mít cestu k obrázku. A pak to vypíšeš jako všechno ostatní (nevím jak vypadá tvůj kód)
Wendy88
Profil *
Takže v samotné databázi nebude uložený obrázek, ale jenom cesta k němu?? Já jsem si myslela že se ten obrázek musí být natvrdo uložený v databazi.
Mockrát děkuju, idu kutit:-)
radvis
Profil *
Nemusí, dáš si tam třeba okresek-13.png a pak v php echo '<img src="obrazky/obaly/'.$query->obrazek.'">';
Wendy88
Profil *
Hm, já jsem zapoměla že bych to musela dát i do formuláře na vkládání nových filmů a tam by se musel řešit nějak ten upload a tak... To by bylo na mě asi moc komplikované, takže na to asi kašlu. Chtěla jsem si to vylepšit, ale tohle by byl můj hřebíček do rakve. Ale i tak moc děkuju RADVISi
radvis
Profil *
Tak si udělej kopii toho, co ti funguje a udělej to na kopii. To je jednoduché zkus se podívat sem: http://interval.cz/clanky/prace-s-obrazky-v-databazi-mysql/ . Stači ti tam přidat par řádku .. kontrola velikosti (pokud chces. Jde to udelat i v css z velkeho obrazku malej), kontrola koncovky (.png, .jpg) a pak cestu kam se má uložit daný obrázek.
Wendy88
Profil *
Za ten článek děkuju, vypadá to celkem jednoduše, ale problém vidím v tomto "Název knihovny je nutno odkomentovat v konfiguračním souboru php.ini" ten soubor bude uložený asi někde v kořenovém adresáři serveru, ne? Já mám jenom subdoménu na školním serveru a pokud vím, tak je hodně zabezpečený, takže mi ten upload asi nepojede :-( Ale i tak děkuju moc za snahu.
radvis
Profil *
Ok no:)
Nox
Profil
Wendy88:
GD je standardně povolená knihovna, mělo by to jet, každopádně to prostě můžeš zkusit a uvidíš (phpinfo() nebo viz manuál, použít nějakou funkci)

Jinak jak se píše v článku, pokud chceš vkládat přímo obrázky do db tak ne cestu jako text, ale data jako BLOB (je myslím víc typů, mrkni se ohledně kapacity)
Wendy88
Profil *
GD mam enabled, takže by to možná šlo, ale koukala jsem na ty příspěvky ke článku a je tam toho hodně špatně a hlavně zastarale. NA to si prostě netroufám :-(
radvis
Profil *
Wendy, kdyby jsi měla zájem napiš na mail a pomohl byh ti to udělat (někde to moýna mám i hotové).
Wendy88
Profil *
Ahoj, já tu nejsu registrovaná, taže tvůj email nevidím, takže posílám můj: wendyy88@seznam.cz
Pokud to máš někde hotové byla bych moc ráda kdyby s mi to poslal. Ale pokud to nemáš, tak tě nechci zdržovat. Je to jenom úkol, asi se tomu programování nebudu nikdy věnovat v budoucnu, takže bych tě jenom zbytečně zdržovala. Sem si říkala, že pokud by to bylo jednoduché, že bych trumfla kluky ze třídy.
Majkl578
Profil
Na opravdu jednoduché zmenšení obrázku by šlo použít exif_thumbnail() (pro JPEG/TIFF soubor) nebo Imagick::resizeImage() (pro kupu typů).
Případně použít onu zmíněnou GD knihovnu. Otevřít obrázek pomocí imagecreatefromjpeg() (pro JPEG, jsou další typy a jim určené funkce), pak si vytvořit nový pomocí imagecreatetruecolor(), zkonvertovat (zmenšit) původní do nového pomocí imagecopyresized() a nakonec uložit pomocí imagejpeg() (opět pro různé typy jsou různé funkce).

EDIT: Dovolil jsem si napsat jednoduchý script (zde) na zmenšení obrázku (jako příklad jsem vzal místní logo). Stačí rozbalit, nastavit složce práva pro zápis (kvůli vytvoření souboru), spustit script a hle, miniatura je na světě.
Tomimo
Profil *
Majkl578
Ahoj, chci se zeptat na ten tvůj skript. Jsem začátečník a moc tomu nerozumím. Jak je tam nastavený ten rozměr 150x100... tzn, že to zachová poměr stran a udělá ten obrázek co největší?? Třeba když budu mít něco o velikosti (třeba svislý banner) 1000x230, tak jak ho to zmenší? Jo a dala by se z toho udělat funkce, že by byl ten soubor jako parametr?
Majkl578
Profil
Tomimo:
Ano, měla by zachovat poměr stran a zmenšit ho tak, aby nepřekračoval vymezené rozměry.

Zkus upravenou verzi:
function resizeImage($srcFile, $outFile, $outputMaxWidth, $outputMaxHeight)
{
    $info = @getimagesize($srcFile);

    if (!$info) {
        throw new InvalidArgumentException('Soubor není obrázek');
    }
    
    $type = substr($info['mime'], -strlen(strrchr($info['mime'], '/')) + 1);
    
    if (!in_array($type, array('jpeg', 'png', 'gif'))) {
        throw new InvalidArgumentException('Soubor musí být typu jpeg, png nebo gif');
    }

    $func = "imagecreatefrom$type";
    $src            = $func($srcFile);
    $srcWidth    = imagesx($src);
    $srcHeight    = imagesy($src);

    $fraction = min($outputMaxWidth / $srcWidth, $outputMaxHeight / $srcHeight);

    if ($fraction < 1) {
        $outputWidth    = floor($srcWidth * $fraction);
        $outputHeight    = floor($srcHeight * $fraction);

        $output = imagecreatetruecolor($outputWidth, $outputHeight);

        imagecopyresized($output, $src, 0, 0, 0, 0, $outputWidth, $outputHeight, $srcWidth, $srcHeight);
    } else {
        $output = $src;
    }

    $func = "image$type";
    $func($output, $outFile);
}

resizeImage(__DIR__ . '/a.gif', __DIR__ . '/a.small.gif', 150, 100);
Tomimo
Profil *
Majkl578:
Tak to je luxus!!! Díky.
Jenom pár návrhů na "vylepšení":
resizeImage(__DIR__ . '/a.gif', __DIR__ . '/a.small.gif', 150, 100);

šlo by to nějak udělat aby jsi nemusel dávat tu příponu .GIF ?? aby se tam doplnila sama?
a ještě třeba ta velikost - aby se nastavila automaticky vždy DELŠÍ strana obrázku na 150px?

Nechci nijak rýpat, jenom by se mi to hodilo a nevím jak to udělat.
Tomimo
Profil *
hmm, já su vůl, že?
"a ještě třeba ta velikost - aby se nastavila automaticky vždy DELŠÍ strana obrázku na 150px? "
ono stačí když napíšu "150, 150", že?
Wendy88
Profil *
Ahoj kluci, mám na Vás velkou prosbu.
Potřebovala bych skloubit dohromady nějaký kód. V #1 jsem psala, že dělám úkol do školy - databázy filmů.
chtěla bych to doplnit o obrázky (malý náhled + velký obrazek přes lightbox)
RADVIS byl tak moc hodný a poslal mi kód na upload obrázku na server a zápis jeho jména do databáze.
tady je zdrojový kod:

  $nadpis = $_POST['nadpis'];
  $autor = $_POST['autor'];
  $text = $_POST['text'];
  $name = $_FILES['obr']['name']; //jméno souboru
  $height = $_FILES['obr']['height']; //velikost v kb
  $tmp_name = $_FILES['obr']['tmp_name']; //umístění obrázku
  $type = $_FILES['obr']['type']; //formát obrázku (JPG, GIF, PNG)
  $error = $_FILES['obr']['error']; //error
  $_FILES['obr']['velikost'] = @GetImageSize($_FILES['obr']['tmp_name']);
  $sirka = $_FILES['obr']['velikost'][0];
  $vyska = $_FILES['obr']['velikost'][1];

 //cesta k obrazku + jeho nazev
  $target = "./images/".$name;


  //je logo ve správném formátu?
  if(($type != "image/jpeg") && ($type != "image/gif") && ($type != "image/png") && ($type != "image/jpg")){
      MySQL_Close();
      Header('Location: index.php');
      exit;
      }

  //je obrazek ve správné velikosti?
  $sirka1 = 1000;
  $vyska1 = 1000;
 if( ($sirka1 < $sirka) || ($vyska1 < $vyska) ){
      MySQL_Close();
      Header('Location: index.php');
      exit;
      }


  //zápis novinky a cesty k souboru do DB
  mysql_query("INSERT INTO upload (nadpis, autor, text, name, datum) VALUES ('$nadpis', '$autor', '$text', '$name', '".time()."')");
 
 
  //přenesení loga na server
  if(!move_uploaded_file($tmp_name, $target)){
    MySQL_Close();
    exit;
    Header('Location: index.php');
  }
 
 
  //logo úspěšně přidáno, presmerovani do administracni casti
  MySQL_Close();
  Header('Location: index.php');


a co bych potřebovala je:
když ve formuláři vyberu fotku a dám upload, aby se mi fotka nahrála na server a pokud vytvořila dvě verze (normalni-max.1000px + thumb-max150px) a pojmenovali se ve stejné složce ve tvaru image253.pripona a image253.thumb.pripona (kde 253 je ID záznamu který se vytvořil). Vím že by tam mělo být ta fce od [#15] Majkl578 a funkci mysql_insert_id(); ale vůbec netuším v jakém pořadí.
__construct
Profil
Neviem odkiaľ máš toto .. (ono height je po anglicky výška .. nie veľkosť ..)
Wendy88:
$height = $_FILES['obr']['height']; //velikost v kb
Správne:
$size = $_FILES['obr']['size']; //velikost v kb
Wendy88
Profil *
__construct:
Ahoj, Radvis mě upozorňoval, že je to starší kód, že teď se to možná píše jinak, ale nahrávání mi funguje vpohodě, takže toto nechci rešit. Já potřebuju poradit, kde do toho kódu [#18] doplnit tu funkci na resize a nevím jestli ji mám volat 2x, když chci velký a malý obrázek a jak je pojmenovat číslem které ještě nemám.
radvis
Profil *
A proč to vlasně nedáš jen jeden (velký obrázek) a pomocí css ho nezmenčíš na třeba 150x150px
Wendy88
Profil *
radvis:

Ahoj, no protože by se musel načíst celý obrázek (a to je prý plýtvání zdroji) a navíc jak bych ho zmenšovala proporciálně když by to nebyl přesně čtverec, ale třeba obdélník?
Pavlikkk
Profil *
Wendy88
Já bych to udělal tak, že bych vložil záznam do databáze nechal si vypsat ID (mysql_insert_id()) a to pak vložil jako proměnnou do resizeru ('image' . $ID.pripona), tu příponu byc rešil přes EXPLODE. A fu funkci bych volal 2x na malý a velký obrázek a pak bych udělal jenom UPDATE do databáze a vložil tam název souboru.
Wendy88
Profil *
Ahojte,
kluci poraďte mi prosím jak mám upravit funkci od Majkl578 z příspěvku [#15]
abych ji mohla volat nějak takto:
resizeImage(TEMP[tečkaAPřípona], IMAGE$id[tečkaAPřípona], 900, 900);

resizeImage(TEMP[tečkaAPřípona], IMAGE$idTHUMB[tečkaAPřípona], 150, 150);


Nevím prostě jak to mám upravit, prosím prosím, pomožte hloupé blondýnce:-)
Wendy88
Profil *
Aby ste věděli že se fakt snažím, tak posílám co jsem splodila, akorát mi to háže chybu.

resizeImage($target, 'image' . $id . '.' . $type, 200, 200);


Warning: imagejpeg() [function.imagejpeg]: Unable to access image17.image/jpeg in /home/students/fr523/public_html/upload/zpracuj.php on line 35
Warning: imagejpeg() [function.imagejpeg]: Invalid filename in /home/students/fr523/public_html/upload/zpracuj.php on line 35

35 řádek je
    $func($output, $outFile);
v původním kódu od [#15] Majkl578 je to řádek č. 34
Wendy88
Profil *
Jupí, už mi to funguje.
$pripona = substr($name, strrpos($name, '.'));
resizeImage($target, 'images/image' . $id . '.thumb' . $pripona, 150, 150); 

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0