Autor Zpráva
dodiew
Profil *
Dobrý den
Potřeboval bych nějakým způsobem porovnávat x pdf souborů s jedním souborem a vybrat ten nejpodobnější, ten jeden soubor by byl nahrán na server. Problém je v tom, že tento nový PDF soubor má změny v cca 18. znacích od svého dvojčete.
Napadlo mě postupně převádět pdf soubory na obrázek, a oblast, kde se budou obrázky budou 100% lišit (v těch 18 znacích) zakrýt nějakým polem.
PDF soubory budou vždy černobílé.

Je nějaký způsob, jak převést pdf na obrázek ?
Lze v obrázku provádět změny na serveru ? konkrétně přidat bílý obdélník ?
Lze z obrázku dostat do pole nějakým způsobem obrázek pixel po pixelu ? například #pdf1 = array("#FFFFFF", "#FFFFFF", "#000000", ........);
Byl by schopný počítač utáhnout takovoudle ... prasárnu ?

Nebo navrhujete nějaké jiné řešení ?
Děkuji za odpovědi


Ještě jsem zapoměl, chtěl bych to řešit v PHP :)
Alphard
Profil
Na druhou sadu otázek je odpověď v zásadě ano, PHP to umí. Jestli to počítač utáhne závisí na rozsahu pdf souborů (obrázky vyžadují velkou RAM, která bývá na hostingu omezena).

Ale nabízí se otázka, proč to dělat tak složitě, nemůžete prostě porovnat text? Najít se nějakou určitě existující knihovnu implementujídí diff?
dodiew
Profil *
Porovnávat text moc nechci, protože chci najít i podobné soubory (výkresy konkrétně) takže jsou tam čáry ...


No tak složitě z toho důvodu, že pdf soubory jsou výkresy, tím pádem tam nějak moc textu není
Problém je v tom, že pdfek je několik tisíc :)
Amunak
Profil
Bojím se, že něco takového je skoro nemožné. Nebyl by sice problém udělat z PDF obrázky, ale porovnávat jejich podobnost bude hodně obtížné.

Napadá mě jedno řešení, které by třeba mohlo fungovat... Jen netuší, jak bych ho někde implementoval:
- pdf převedete na obrázky (třeba přes imagemagick)
- obrázky převedete do grayscale (z třeba 4 nebo 8 odstínů) nebo jen do černobílé
- pomocí nějakého externího nástroje (třeba zase imagemagicku) "zjednodušíte" obrázky tak, aby ztratily podrobnost, DPI. Aby se skupiny pixelů slily, zprůměrovaly do jednoho - např. ze skupiny 3 černých a 1 bílého pixelu se stane černý (na to by šly použít nějaké zvětšovací/zmenšovací algoritmy)
- výsledek implementuji jako bity (černá=1, bílá 0, nebo adekvátně skupiny bitů pokud tam mám i odstíny)
- výsledné bity nebo skupiny bitů v jednotlivých souborech spolu porovnám, a budu počítat, kolik procent stejných bitů tam je
- nastavím si nějakou hranici, nad kterou soubory zběžně projedu ručně, anebo je prostě budu od nějaké hranice považovat za shodu

Nejvíc při tom bude záležet na tom, jak moc si ty obrázky "zjednodušíte". Když to přeženete, bude vám to vyhazovat málo hodnotné výsledky (spousta i odlišných věcí se bude tvářit jako shodná). Když to nastavíte zase moc nízko, příliš detailní, bude se vám shoda zjišťovat jen obtížně a porovnávání bude trvat velmi dlouho.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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