Autor | Zpráva | ||
---|---|---|---|
final Profil |
#1 · Zasláno: 1. 3. 2013, 10:34:49
Zdravím,
mám 2 obrázky: - prvy.jpg(192x192), každých 64x64 je na pozadí iná farba(teda dokopy 9) - druhy.jpg(64x64), na pozadí je prvá farba z prvy.jpg $prvy = imagecreatefromjpeg('img/prvy.jpg'); $druhy = imagecreatefromjpeg('img/druhy.jpg'); $dest = imagecreatetruecolor(64, 64); imagecopy($dest, $prvy, 0, 0, 0, 0, 64, 64); header('Content-Type: image/jpeg'); imagejpeg($dest); Dajú sa porovnať tieto 2 obrázky? Niečo ako $img=imagejpeg($dest); if ($img == $druhy) { echo "sú rovnaké :)"; }else { echo "nie sú rovnaké :("; }/ header('Content-Type: image/jpeg');
ďakujem za pomoc |
||
midlan Profil |
#2 · Zasláno: 1. 3. 2013, 10:46:45
final:
„To ale nefunguje keďže tam mám header('Content-Type: image/jpeg');“ pokud ten obrázek nechceš vykreslovat tak to tam nedávej, stejně si ale myslím, že obrázky nepůjdou porovnat jako resource. Já bych to asi zkusil tak, že bych si vypsal do uoutput buferů oba obrázky a pak výstup porovnal, podmínkou bude určitě použití stejné komprese a formátu pro oba obrázky, možná ale plácám a i tak to nepůjde. |
||
final Profil |
#3 · Zasláno: 1. 3. 2013, 10:55:47
midlan:
„á bych to asi zkusil tak, že bych si vypsal do uoutput buferů oba obrázky a pak výstup porovnal“ A to ako? „pokud ten obrázek nechceš vykreslovat tak to tam nedávej“ no pokiaľ to tam nie je, tak to vypisuje len divné znaky |
||
Kubo2 Profil |
#4 · Zasláno: 1. 3. 2013, 13:35:29
final:
pokial ho nechces vykreslovat, cize tam nedas to imagejpeg($img), tak ti nevypise ani divne znaky. |
||
peta Profil |
"To ale nefunguje keďže tam mám header('Content-Type: image/jpeg');"
Tak to tam nedavej, kdyz chces po php vystup text/html "sú rovnaké :)". jpeg1(65% kvality) zakomprimovany na jpeg2(65% kvality) obsahuje jina data nez nez puvodni jpeg1. Pokud to dekomprimujes do bitmapy, tak se barvy pixelu nemusi 100% shodovat, protoze jpeg je ztratova metoda. Nejvetsi shodu dostanes, pokud budou obrazky obsahovat mirne prechody. Kdyz si v grafickem programu udelas sachovnici bily pixel, cerny pixel, ulozis to jako jpeg65%, pak to zobrazis, bude to sachovnice svetle seda, tmave seda. Pokud to jeste jednou zkomprimujes, tak se barvy k sobe jeste vic priblizi, ale uz to nebude tak vyrazne jako u bile-cerne. Jak to porovnat? Mas script pro zmensovani obrazku? Porovnej rozmery rozdil, porovnej velikost souboru. Pokud tam bude 90% rozdil, povazuj to za shodu, pouzij prvni obrazek. Nekdy se muze stat, ze zmensenim obrazku o malinko se zvetsi data pro ulozeni. A roztahovat mrnavy obrazek 30x30 na 100x100 je tez neusporne. Ale muze to byt prakticke pro dalsi praci. http://php.net/manual/en/function.getimagesize.php |
||
user243 Profil |
#6 · Zasláno: 1. 3. 2013, 20:02:09
a zkusit je třeba porovnat pomocí md5 nebo sha1?
|
||
final Profil |
#7 · Zasláno: 2. 3. 2013, 09:35:36
peta:
„Jak to porovnat? Mas script pro zmensovani obrazku? Porovnej rozmery rozdil, porovnej velikost souboru. Pokud tam bude 90% rozdil, povazuj to za shodu, pouzij prvni obrazek. Nekdy se muze stat, ze zmensenim obrazku o malinko se zvetsi data pro ulozeni. A roztahovat mrnavy obrazek 30x30 na 100x100 je tez neusporne. Ale muze to byt prakticke pro dalsi praci.“ no, ale to by sa nedalo použiť na to na čo to potrebujem ja.. toto všetko som chcel aplikovať na generovanie mapy: -na začiatku veľký obrázok(napr. 5000x5000px) a rozsekať ho napr. po 50x50 do databázy, a keďže na tom obrázku bude veľmi veľa typov políčok tak žiaden iný spôsob generovania ma nenapadol nejaké nápady? |
||
Mike8748 Profil |
final:
chápu dobře že máš mapu (velký obrázek) která je vytvořená samostatně nezávsle na skriptu a ty ji chceš skriptem zanalyzovat pro potřeby hry (toho skriptu)? v prvej řadě si zajisti že nebude použito JPG ani jiného ztrátového formátu obrázku „a keďže na tom obrázku bude veľmi veľa typov políčok“ kolik typů? jsou nějak definované? podle čeho je chceš rozlišovat? edit: a ještě... jak ty pole vypadají? jen barva nebo skutečně obrázek něčeho? |
||
final Profil |
#9 · Zasláno: 2. 3. 2013, 10:00:12
Mike8748:
> chápu dobře že máš mapu (velký obrázek) která je vytvořená samostatně nezávsle na skriptu a ty ji chceš skriptem zanalyzovat pro potřeby hry (toho skriptu)? > v prvej řadě si zajisti že nebude použito JPG ani jiného ztrátového formátu obrázku jasné, že nie jpg, to bolo len pre test.. áno, mám mapu(veľký obrázok) a z toho chcem vždy na začiatku servera vygenerovať mapu do databázy > kolik typů? jsou nějak definované? podle čeho je chceš rozlišovat? > edit: a ještě... jak ty pole vypadají? jen barva nebo skutečně obrázek něčeho? myslím, že veľa typov, chcel som všetky typy uložiť do array-u a následne porovnávať zhodu niekde som čítal že si mám uložiť farbu 1 pixela z každého typu obrázku(napr. 1px v strede každého 50x50) a následne prejsť celý veľký obrázok..ale to nie je dobré riešenie pretože s 1 farbou by vyhovovalo viac typov obrázkov..a ukladať si viac ako 1 farbu mi príde zbytočné.. |
||
Mike8748 Profil |
final:
no... bez znalosti obrázků těžko říct... pokud jeden pixel pro identifikaci nestačí tak jich samozdřejmě potřebuješ více (např na obrázku 50x50 vzít střed, a body 10 pixelu od něj na všechny 4 strany), pak porovnávat několik čísel, a na základě toho ten obrázek identifikuješ. „a ukladať si viac ako 1 farbu mi príde zbytočné..“ tomu se stejně nevyhneš :) pokud je typů omezený a konečný počet (což předpokládám že je) tak si udělej mapu (asoc. pole) kde bude uloženo kombinace identifikátoru(názvu) typu a hodnoty klíčových pixelů (jejichž pozice budou vždy stejné v rámci obrázku a zvolené tak aby hodnoty pixelů byly jedinečné v rámci celé sady typů) a pak budeš mapu porovnávat s těma hodnotama.... jiné jednodušší řešení není. není třeba porovávat celou bitmapu ale stačí právě dostatečný počet pixelů (jejichž počet záleží na složitosti typů/mapy) taky je otázka jak ta mapa kterou budeš zpracovávat vzniká... jestli by se nedalo tento proces pozměnit tak aby celá analýza o kterou se pokoušíš nebyla vůbec zapotřebí |
||
final Profil |
#11 · Zasláno: 2. 3. 2013, 11:07:50
Mike8748:
„taky je otázka jak ta mapa kterou budeš zpracovávat vzniká“ klasickým výberom z db po blokoch |
||
Mike8748 Profil |
final:
pokud obrázek vzniká výběrem.... tak víš z čeho je složen... tak proč to chceš zpětně analyzovat? při vytváření si někam do 2d pole ukládej ID obrázků které tvoří výsledek, to pak převedeš na string který někam uložíš (třeba do metadat obrázku) pak stačí akorát načíst ten string, převést ho zpět na 2d pole a máš to, žádná analýza není třeba. porovnáváním obrázků si to jen komplikuješ edit: případně už při vytváření mapy do DB ukládej to čeho chceš docílit tím porovnávánim obrázků, uloženým datům přiřadíš ID nebo hash (tedy budeš mít ID mapy) a pracuj s tímto údajem |
||
final Profil |
Mike8748:
„pokud obrázek vzniká výběrem.... tak víš z čeho je složen... tak proč to chceš zpětně analyzovat?“ no, ale na to aby vznikol výberom potrebujem najprv na začiatku tu mapu mať v db :)-a to je ten proces, ktorý tu riešim) |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
final:
Pokousi se ti tu naznacit, ze ten ctverecek 100x100 muzes vygenerovat uzivateli skladanim obrazku, ktere na nem jsou a ne opacne analyzovat obrazek, co je v databazi. Pripadne si ulozit do databaze, co na tom obrazku je pri jeho vytvareni. Nevim, proc chces vzit obrazek a hledat na nem objekty. Pro hledani objektu je nejlepsi pouzit nejakou metodu hledani okraju, hran. Najit obrys, zmensit ho na urcitou velikost, porovnat s obrysem teze velikosti v databazi a rici, jak moc se shoduji (mas velkou fotku, udelas obrys obliceje, okoli od obrysu zahodis, obrys zmensis na 50x50, porovnas v db s obrysem 50x50). Pokud ale presne vis, co na tom obrazku je a umis z neho vybrat unikatni 1-n barev a jejich pozici, tak je to pak snadnejsi nez hledat obrysy. Bys musel ukazat obrazek a co na nem chces hledat. --- html5 canvas pozadie + postava Uz to chapu, asi. Ty sis nakreslil jpeg a chces ho pouzit jako pozadi do hry. A pak z toho obrazku chces detekovat kolizi objektu a zjistovat druh objektu. Tak to mas hodne vesele :) Nech uzivatele, ktery ten obrazek udelal, vyznacit, oramovat objekty. Detekce samozrejme jde resit, jak jsem popsal, ale prijde mi to ne tak uplne spolehlive, pokud bude vice obrazku podobnych. |
||
Časová prodleva: 4 dny
|
|||
final Profil |
#15 · Zasláno: 9. 3. 2013, 18:19:48
peta:
„Uz to chapu, asi. Ty sis nakreslil jpeg a chces ho pouzit jako pozadi do hry. A pak z toho obrazku chces detekovat kolizi objektu a zjistovat druh objektu. Tak to mas hodne vesele :) Nech uzivatele, ktery ten obrazek udelal, vyznacit, oramovat objekty. Detekce samozrejme jde resit, jak jsem popsal, ale prijde mi to ne tak uplne spolehlive, pokud bude vice obrazku podobnych.“ nie nie to je úplne iná vec už :D táto téma bola na browser hru..príklad http://devana.eu/game/grid.php, ich mapa sa ale generuje z obrázku asi 100x100 kde každý px predstavuje iný obrázok ( voda, pevnina ect..), v mojom prípade som chcel mať týchto typov obrázkov okolo 50.. |
||
Časová prodleva: 11 let
|
0