Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Script care calculeaza cate culori are o imagine
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Subiectul anterior :: Subiectul următor  
Autor Mesaj
Devil4U



Data înscrierii: 15/Iun/2005
Mesaje: 327

Trimis: Mie Apr 23, 2008 4:32 pm    Titlul subiectului: Script care calculeaza cate culori are o imagine  

Salut!

Lucrand la un script m'am lovit de o problema. Cum pot sa diferentiez niste poze aflate pe un website care au acelasi nume si aceasi marime? M'am gandit ca daca voi calcula cate culori sunt intr'o poza pot deosebi pozele cu 2 culori de restul. Adica sa fac o filtrare.

Ceva idei/sfaturi?
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 2764
Locație: Targoviste City

Trimis: Mie Apr 23, 2008 5:08 pm    Titlul subiectului:  

pai, vrei sa afli dimensiunea sau culorile?..
sa aflii culorile dintr-o imagine nu cred ca e util [poti sa vezi imagecolorat si alte functii din libraria GD a lui PHP] daca vrei sa aflii dimensiunea... exista alte functii pentru a afla numarul de pixeli sau numarul de biti. spor!
Sus  
Devil4U



Data înscrierii: 15/Iun/2005
Mesaje: 327

Trimis: Mie Apr 23, 2008 5:15 pm    Titlul subiectului: :)  

pai dimensiunea o stiu, eu vreau doar sa le pot diferentia cumva.. (toate au aceasi marime si acelasi nume.. eu doar le apelez si prin get ii dau o informatie)
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 2764
Locație: Targoviste City

Trimis: Mie Apr 23, 2008 6:39 pm    Titlul subiectului: Re: :)  

Devil4U a scris: pai dimensiunea o stiu, eu vreau doar sa le pot diferentia cumva..
eu stiu ca un fisier se diferentiaza de un altul prin nume, in primul rand... apoi apare type-ul, dimensiunea si altele... tu ai fisiere de acelasi tip [imagine], de aceeasi dimensiune, cu acelasi nume... si vrei sa le diferentiezi dupa culori? 8O imi vine sa rad, pe bune... :lol:
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 490
Locație: Drobeta Turnu Severin

Trimis: Joi Apr 24, 2008 3:23 am    Titlul subiectului:  

Incearca sa deschzi fisierele cu fopen() si citesti din fiecare cu fread() pana la sfarsit sau pana cand intalnesti prima diferenta.
Eu inteleg ca fisierele cu imaginile nu stiu din ce motive au acelasi nume si extensie (obligatoriu se gasesc in foldere diferite) si aceiasi dimensiune dar difera continutul (adica e alta imagine).
Chiar asa !? Poti incerca cum ti-am zis dar ma indoiesc ca asa ceva poate exista.
Sus  
Devil4U



Data înscrierii: 15/Iun/2005
Mesaje: 327

Trimis: Joi Apr 24, 2008 6:38 am    Titlul subiectului: hmm  

deci imaginea este parsata de un script php care primeste o informatie prin GET si afiseaza o anumita poza. Eu vreau sa filtrez dupa ceva pozele ca sa stiu daca le salvez sau nu.. sa automatizez ca nu o sa stau sa dau clickuri manual ca inebunesc.

Acelasi nume, aceasi locatie.. singura chestie la care m'am gandit au fost culorile, "imagecolorstotal() — Find out the number of colors in an image's palette" am incercat dar nu mi'a mers sau nu am facut scriptul cum trebuie sau dupa dimensiune..
Sus  
punctweb



Data înscrierii: 24/Mar/2004
Mesaje: 499

Trimis: Joi Apr 24, 2008 8:02 am    Titlul subiectului:  

asta ajuta ?
Sus  
Devil4U



Data înscrierii: 15/Iun/2005
Mesaje: 327

Trimis: Joi Apr 24, 2008 8:04 am    Titlul subiectului: :)  

nu are nici o legatura..
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1155
Locație: Sibiu

Trimis: Joi Apr 24, 2008 8:54 am    Titlul subiectului:  

Foloseste md5_file(). Iti returneaza hash-ul md5 calculat pe continutul fisierului. Daca un bit difera, hash-ul rezultat difera. E cea mai sigura varianta. Astfel 2 fisiere cu nume diferite dar continut identic (adica copy-rename) sunt considerate ca echivalente. Asta doreai, nu?
Sus  
vectorialpx



Data înscrierii: 01/Mar/2005
Mesaje: 2764
Locație: Targoviste City

Trimis: Joi Apr 24, 2008 9:43 am    Titlul subiectului:  

Citat: maginea este parsata de un script php care primeste o informatie prin GET
deci, ce imagine e [nu poti sa verifici inainte de a adauga "informatia"] si ce ai prin GET. Pui un watermark sau ce?

vrei sa diferentiezi imaginile sa nu fie aceleasi, am inteles eu... imagini pe care: le iei de undeva sau le ai in baza de date sau le generezi din PHP din nimic?..

mihaitha, nu stiu daca merge treaba cu md5_file() [ma gandesc eu..] ca daca au aceeasi dimensiune si acelasi type, pot avea data diferita... vor fi diferite prin md5 dar pot reprezenta aceeasi imagine. Pe el il cam intereseaza cum arata imaginea sa faca o comparatie... cred ca vrea sa spuna ca imaginea e singura care le diferentiaza [e posibil sa ma insel] numai ca ar fi foarte aiurea sa compari cu PHP imagini vizual...

eu zic asa.. genereaza tot apoi le stergi pe cele ce nu-ti trebuiesc
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1155
Locație: Sibiu

Trimis: Joi Apr 24, 2008 11:53 am    Titlul subiectului:  

octavian, nu stiu daca md5_file() aplicat pe 2 fisiere identice dar cu date de acces/creare/modificare diferite returneaza hash-uri diferite. Normal n-ar trebui, intrucat md5_file() calculeaza hash-ul pe continutul fisierului, in timp ce timestamp-urile de acces/creare/modificare sunt tinute in filesystem... N-am incercat niciodata, dar o sa testez la un moment dat. Normal ar trebui sa dea acelasi hash.

devil o alta varianta de comparatie (insa nu foarte sigura) ar fi prin intermediul histogramei imaginilor. Voi elabora:

Histograma reprezinta un grafic - practic un set de perechi (culoare / valoare) care contine numarul de aparitii pentru fiecare valoare a culorii (numarul de pixeli de culoarea respectiva). Poti sa-ti faci un array de valori de culoare (in cazul cel mai defavorabil va fi foarte mare - 16.7 milioane de elemente pentru o imagine truecolor - 24 de biti - care contine cel putin un pixel din fiecare culoare), dupa care parsezi imaginea pixel cu pixel si incrementezi valoarea elementului corespunzator culorii RGB citite din pixel. Faci chestia asta pentru ambele imagini si apoi compari histogramele. Daca sunt identice, e foarte probabil ca si imaginile sa fie identice. De ce zic foarte probabil si nu sigur? Pai fii atent:

Sa ne inchipuim ca avem doua imagini de 3px pe 3px. Voi schita harta de pixeli (bitmapul) celor doua imagini, in care X, Y si Z reprezinta valori de culoare: Cod:
    imaginea1                  imaginea2
      X X X                      X Y Z
      Y Y Y                      Z X Y
      Z Z Z                      Y Z X
[/code]Banuiesc ca e destul de vizibil ca imaginile sunt total diferite. Analizand insa histogramele, observam ca ambele imagini au histograme identice, respectiv ((X, 3), (Y, 3), (Z, 3)).

De asemenea, atat la comparatia pe baza histogramei, cat si la cea pe baza functiei md5_file(), poate aparea o alta problema: de doua ori aceeasi imagine, insa cu dimensiuni diferite, sau mai rau, cu aceleasi dimensiuni insa grad de compresie diferit (in cazul jpeg-urilor). In aceste cazuri vei avea atat histograme diferite, cat si hash-uri md5 diferite, chiar daca pentru ochiul uman este practic vorba de aceeasi imagine.

Deci pana la urma ajungem la varianta lui octavian: genereaza tot apoi le stergi pe cele ce nu-ti trebuiesc.
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 490
Locație: Drobeta Turnu Severin

Trimis: Vin Apr 25, 2008 1:00 pm    Titlul subiectului:  

Nu inteleg de ce nu-i bine cum i-am zis eu. Nu functioneaza?
Salveaza imaginea intr-un folder tmp o deschide cu fopen(), face acelasi lucru cu prima imagine din arhiva si le citeste sincron, s.a.m.d. La prima diferenta trece la imaginea urmatoare din arhiva, daca gaseste una identica atunci renunta la upload.
Poate e prea lenta !?
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1155
Locație: Sibiu

Trimis: Vin Apr 25, 2008 1:44 pm    Titlul subiectului:  

dechim, nu zic ca varianta ta nu ar fi eficienta, dar e foarte laborioasa, plus (cred) foarte solicitanta pentru server. Gandeste-te daca are 1000 de imagini, cat ii ia sa faca verificarea asta in cazul unei imagini noi. md5_file() face cam acelasi lucru, dar fara chinul de a implementa citirea propriu-zisa. Plus ca si metoda ta e susceptibila la aceleasi probleme pe care le-am exemplificat.
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 490
Locație: Drobeta Turnu Severin

Trimis: Sâm Apr 26, 2008 4:44 pm    Titlul subiectului:  

Eu ma gandeam ca toate pozele cu exceptia uneia sunt diferite de cea pe care urmeaza sa o uploadeze. Ce-i drept deschid pe rand toate cele 1000 de fisiere dar la 999 nu voi citi decat o data, 512 octeti sunt arhisuficienti pentru a vedea ca exista diferenta. MD5 calculeaza "cifra de control" citind tot fisierul, are avantajul ca fiind implemetata in cod nativ procesor server e rapida. Nu stiu ce sa zic, mi se pare interesant, am sa incerc sa fac un test cand voi avea timp !
Sus  
crivion



Data înscrierii: 10/Apr/2007
Mesaje: 526
Locație: Somewhere

Trimis: Lun Apr 28, 2008 7:04 am    Titlul subiectului:  

uite ceva http://docs.jquery.com/CSS/css#properties
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community