Autor | Zpráva | ||
---|---|---|---|
Lechy Profil |
#1 · Zasláno: 18. 8. 2010, 17:08:27
Ahoj, mám kod na vkládání fotografií, a potřeboval bych dotoho implementovat vytváření miniatur. Miniatura se pouze nahraje na server, nebude se ukládat do databáze. Takže, když nahraju fotku ve finální verzi by to mělo vypadat: 1.jpg a 1miniatura.jpg.
Zde mám kod: $sql_id = mysql_query("SELECT id FROM gallery_sections ORDER by id DESC"); $row_id = MySQL_Fetch_Array($sql_id); $addid = ($row_id['id']+1); if (is_uploaded_file($_FILES["addimg"]["tmp_name"])){ $path_parts = pathinfo($_FILES["addimg"]["name"]); if (in_array(strtolower($path_parts['extension']), array('jpg','gif','png'))) { $name= $addid.".".$path_parts['extension']; $func_copy = copy($_FILES["addimg"]["tmp_name"], "../images/gallery/sekce/$name"); } else { error("Nepovolený formát!"); } } Zkoušel sem dosadit několik kodu, nalezené z internetu, ale neumím to tam správně přidat a sprovoznit. |
||
Pietro Profil |
#2 · Zasláno: 18. 8. 2010, 20:56:18
A co přímo chceš? Kód na vytváření zmenšených obrázků?
|
||
Lechy Profil |
#3 · Zasláno: 18. 8. 2010, 21:32:49
No kod..ale aby mi dotoho fungoval zkusil sem asi 3 kody, který sem našel na internetu a prostě mi to nešlo udělat nevím jak přesně to udělat dotoho mího kodu.
|
||
Pietro Profil |
#4 · Zasláno: 18. 8. 2010, 22:22:06
Za použití ImageMagicku to jde velice lehce:
$sql_id = mysql_query("SELECT id FROM gallery_sections ORDER by id DESC"); $row_id = MySQL_Fetch_Array($sql_id); $addid = ($row_id['id'] + 1); if (is_uploaded_file($_FILES["addimg"]["tmp_name"])) { $path_parts = pathinfo($_FILES["addimg"]["name"]); if (in_array(strtolower($path_parts['extension']), array('jpg', 'gif', 'png'))) { $name = $addid . "." . $path_parts['extension']; $func_copy = copy($_FILES["addimg"]["tmp_name"], "../images/gallery/sekce/$name"); // ošetříme, pokud se soubor nezkopíroval if (!$func_copy) { error('Soubor se nepodařilo zkopírovat'); } else { // soubor se zkopíroval, jdeme vytvářet zmenšeninu // nejdříve si vytvoříme instanci ImageMagicku z toho okopírovanýho obrázku try { $im = new Imagick('../images/gallery/sekce/' . $name); // pokud chces zmensit obrazek na maximalni velikost: $im->scaleImage(MAX_VYSKA, MAX_SIRKA, true); // pokud chces zmensit a oriznout obrazek na velikost, pouzij misto toho toto: $im->cropThumbnailImage(PRESNA_VYSKA, PRESNA_SIRKA); // a ted uz to jenom ulozime - napriklad do podadresare /nahled $im->writeImage('../images/gallery/sekce/nahledy/' . $name); $im->clear(); $im->destroy(); } catch (ImagickException $e) { // pokud se při zpracování vyskytne chyba: error('Chyba při úpravě obrázku: ' . $e->getMessage()); } } } else { error("Nepovolený formát!"); } } |
||
Lechy Profil |
#5 · Zasláno: 18. 8. 2010, 22:48:06
Píše mi to chybu:
Fatal error: Class 'Imagick' not found in /home/free/tym.cz/w/winsome-effect/root/www/admin/modules/gallery.php on line 150 |
||
Pietro Profil |
#6 · Zasláno: 18. 8. 2010, 22:57:15
Tak to nemáš na webhostingu nainstalovanej ImageMagick. Silně bych doporučoval změnit webhosting - IC.cz ImageMagick nemá.
Ono asi by to chtělo něco nastudovat o PHP, než se začneš pouštět do větších projektů. Zkus si to přepsat za použití funkcí knihovny GD: http://cz.php.net/manual/en/book.image.php. |
||
Alphard Profil |
#7 · Zasláno: 18. 8. 2010, 23:11:16
[#6] Pietro
Hmm, zrovna kvůli ImageMagick bych hosting asi neměnil. Lechy: GD knihovna to zvládne, spolehlivá funkce třeba na http://php.vrana.cz/zmensovani-obrazku.php. Odkázanou funkci si zkopírujte do vaše scriptu, nebo ji dejte zvlášť a includujte ji, je to jedno. Za 10. řádek (fce copy()) dejte: list($width, $height) = image_shrink_size($_FILES["addimg"]["tmp_name"], 200, 150); image_resize($_FILES["addimg"]["tmp_name"], "../images/gallery/sekce/miniatura_$name", $width, $height); |
||
Lechy Profil |
#8 · Zasláno: 18. 8. 2010, 23:38:21
Alphard:
Děkuji mnohokrát, funguje jak má :) |
||
Pietro Profil |
#9 · Zasláno: 18. 8. 2010, 23:52:49
Alphard:
„Hmm, zrovna kvůli ImageMagick bych hosting asi neměnil.“ Donedávna jsem všude používal GD. Ale jak jsem zjistil, s imagickem se mnohem lépe a rychleji pracuje a není problém s ním nakreslit takřka cokoliv. Navíc jsem se při zpracování velkých fotek (myslím tím rozměry) setkal s tím, že se mi skript nevlezl do memory_limitu a byl problém. Ovšem ta instalace do PHP na Windowsu není vůbec jednoduchá. Strávil jsem s tím skoro půlden. Takže pro mne by to určitě na změnu hostingu bylo. |
||
Alphard Profil |
#10 · Zasláno: 19. 8. 2010, 00:06:13
Pietro:
„Donedávna jsem všude používal GD. Ale jak jsem zjistil, s imagickem se mnohem lépe“ Ano, GD je dobré používat s nějakou obálkou. Pak se kód pro zmenšení omezí na Image::fromFile('nette.jpg')->resize(100, 50)->send(); „a není problém s ním nakreslit takřka cokoliv“ Běžná stránka nepotřebuje kreslit cokoliv. „setkal s tím, že se mi skript nevlezl do memory_limitu“ To je časný problém. Zase na druhou stranu, stejně tak jako hledat hosting s ImageMagick můžu požadovat vyšší memory limit. V podstatě je asi pravda, že když je ImageMagick k dispozici, je lepší ho použít. Nette má vlastnost $useImageMagick, předpokládám, že tímto je problém vyřešen. |
||
Pietro Profil |
#11 · Zasláno: 19. 8. 2010, 00:11:29
[#10] Alphard
„Běžná stránka nepotřebuje kreslit cokoliv.“ Pravda, že běžná stránka potřebuje akorát zmenšovat fotky. „požadovat vyšší memory limit.“ Potřebnou paměť se dá dopředu spočítat, takže taky se s tím dá popasovat. „V podstatě je asi pravda, že když je ImageMagick k dispozici, je lepší ho použít.“ Souhlasím „Nette má vlastnost $useImageMagick, předpokládám, že tímto je problém vyřešen.“ Nikdo se tu ale o Nette nebavil. Opravdu problém od Lechyho je vyřešen, tak už nebudu na toto téma odpovídat. Slibuju ;) |
||
Časová prodleva: 14 let
|
0