Autor Zpráva
kikinet
Profil
Zdravím,
netušíte někdo, proč tato funkce na zmenšení obrázku nefunguje? Přesunutí do adresáře proběhne v pořádku. Pak se mi ale zdá, že do $image se nic nenačte... Chybové hlášky nic nevypíšou (jsou zapnuté). Už fakt nevím, jak na to.
    //zmenšení nejdelší strany na 600px
      $size = getImageSize($photos[$keys[$i]]['tmp_name']);
      $ratio = $size[1]/$size[0];                                  //poměr stran
      $dest = "./".$photos[$keys[$i]]['url']['url_orig'].$name;
      move_uploaded_file($photos[$keys[$i]]['tmp_name'], $dest);   //přesunutí fotky do adresáře
      $image = imageCreateFromJpeg($dest);

  //zmenšení
        $imgorig = imageCreateTrueColor(600/$ratio,600);           //černý obrázek požadované velikosti pro zmenšenou fotku
        $imgthumb = imageCreateTrueColor(150,150);                 // -------   ||   -------   miniaturu fotky 
        $orig = imageCopyResampled($imgorig, $image, 0, 0, 0, 0, 600/$ratio, 600, $size[0], $size[1]);           
        $thumb = imageCopyResampled($imgthumb, $image, 0, 0, 0, ($size[1]-150)/2, 150, 150, $size[0], $size[1]); 

    //uložení fotek do adresáře  
      move_uploaded_file($orig, $dest);    
      move_uploaded_file($thumb, "./".$photos[$keys[$i]]['url']['url_thumb'].$name);
Alphard
Profil
Pro začátek výsledné fotky ukládat pomocí imagejpeg(), move_uploaded_file() není funkce na všechno :-)
Chro
Profil
Tak nejprve bych hlavně uploadovaný soubor uložil. Až pak bych s ním dále pracoval s funkcemi jako imagecreate... imagecopyresampled atd. Upravený obrázek se ukládá funkcí např imagejpeg se dvěma či třemi parametry (zdroj, název souboru, kvalita).
kikinet
Profil
Alphard:
Dobře, vyzkouším.

Chro:
Jak už jsem psala, uložení obrázku do adresáře proběhne v pořádku. Takže obrázek uložený mám, ale už mi nejde zmenšit.


Alphard:
Tak jo, jak jsi teda řekl, přepsala jsem to na imagejpeg()
imageJpeg($orig, $dest);    
imageJpeg($thumb, "./".$photos[$keys[$i]]['url']['url_thumb'].$name);
teď už mi vyhodí v php chybovou hlášku: Warning: imagejpeg() expects parameter 1 to be resource, boolean given in /home/www/... on line 82 + to samé pro další řádek. Což znamená, že mu v prvním parametru nepředávám obrázek?
Alphard
Profil
kikinet:
Což znamená, že mu v prvním parametru nepředávám obrázek?
Správně, chybu je třeba hledat někde výše, protože $orig = imageCopyResampled() zřejmě vrací false, tj. skončilo chybou.

Pokud nejde o vytvoření si vlastního řešení, doporučuji využít PHP triky - Zmenšování obrázků.
kikinet
Profil
Alphard:
To bude asi problém, je to práce do školy a tam bych měla přijít se svým řešením (i když tohle bude určitě vyladěnější). Kouknu se na to jeho řešení ještě. Jinak si myslím, že chyba bude ještě výš $image = imageCreateFromJpeg($dest);. Tahle funkce mi totiž nevyhodí žádný obrázek, jen ikonu "nefunkčního" jpg obrázku. Ovšem zadaná cesta se mi zdá správná, jelikož přes tuto adresu ukládám soubor a ten se v pořádku uloží.
Alphard
Profil
$image a další podobné nelze rozumně prohlížet. Je to v podstatě jen odkaz na úsek paměti (zjednodušeně řečeno). Obrázek z toho udělá právě až funkce imageJpeg().
Chro
Profil
Výstup funkcí imagecreate... v případě úspěchu je ukazatel na zdroj, nikoli nějaký zobrazitelný obrazový formát. PHP následně z obrázkem manipuluje interně ve vlastním formátu gd nebo gd2, podle verze knihovny GD.
kikinet
Profil
Alphard, Chro:
pokud dám pod tuto funkci ještě
header('Content-Type: image/jpeg');
imagejpeg($image);
mělo by mi to vyhodit obrázek, pokud se dobře nahrál do $image, ne? Teda pokud to dobře chápu, protože v mém případě toto nefunguje
Alphard
Profil
kikinet [#9]:
Ano, přesně tak. Když to ale nefunguje, je lepší tu hlavičku zakomentovat, protože jinak neuvidíte chybovou hlášku, jen ikonu nefunkčního obrázku.
kikinet
Profil
Alphard:
Pokud to dám bez hlavičky, zobrazí se mi tohle.
Chro
Profil
Ono by bylo nejlepší začít znova se skriptem po části s uložením obrázku po uploadu a krok za krokem se dobrat výsledku, bo nikdo neví, jak ten skript máš nyní koncipovaný, stejně jako v [#1] asi těžko.
kikinet
Profil
Chro:
Je pořád stejný. Až na změnu v [#4]. Nic jiného jak to upravit, mě totiž nenapadá. Teď to krok za krokem probírám, očividně se to sekne rovnou na imageCreateFromJpeg(), protože php nehlásí žádnou chybu a obrázek z této funkce nejde nijak zobrazit. Funguje pouze uložení do adresáře. Potom používám stále stejnou cestu.

Teď mě ještě napadá, nemůže to být třeba nějakým omezením serveru?


Alphard, Chro:
tak nevím čím to je, ale teď to jede. Uložení, zmenšení, všechno šlape. Jen fakt netuším proč to teď jede a předtím ne... Záhada.
Děkuju za spolupráci :)
peta
Profil
(novy radek)
<?php
header('Content-Type: image/jpeg');
imagejpeg($image);
?>
Kdyz k tomu pridas novy radek nebo mezeru na zacatku, tak uz to nejsou data obrazku. Navic, php vyhodi error, protoze pouzivas header po te, co uz byl odeslan s tim novym radkem, prave. Mozna to byl ten problem.

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: