Hallo Am Samstag, den 25.12.2004, 20:41 +0100 schrieb Kai Hauser:
Hi Joerg. rechen mal aus: 100^64 das ist die Anzahl der Unterschiede die du Speichern möchtest.
Ne, möchte ich eben nicht. Es gibt ja nur einen Fingerprint pro Font - also bei 400.000 Fonts ebensoviele Fingerprints. Nötig wäre eben "nur" eine Funktion in MySQL, der ich den gesuchten Fingerprint übergeben würde, z.B. "10-20-30-40-50", und die mir die "ähnlichsten" Fingerprints zurückgibt - eben sortiert nach Ähnlichkeit. Ich hatte schon vermutet, daß es diese Funktion nicht gibt. Schade.
Ist das wirklich nötig um die Fonts vergleichen zu können? Vielleicht solltest du den Fingerprint erst mal überarbeiten.
Naja, das Aussehen eines Fonts kann man eben nicht in einer einfach Zahl speichern. Der Fingerprint kommt so zustande: Ich erstelle ein leeres Bild. Darin wird der Buchstabe mit 128 Pixeln Größe geschrieben. Dann wird der weiße Rand abgeschnitten. (Damit ist sichergestellt, daß der Buchstabe komplett drauf ist und genau bis an den Rand geht) Das Bild wird jetzt unproportional gezerrt, bis es genau 128x128 Pixel groß ist. Dann wird es in 8x8 kleine Bilder zerlegt - macht 64 Bilder. Für jedes dieser Bilder wird ermittelt, wieviele Pixel weiss sind, und wie viele Schwarz, umgerechnet in Prozent. (Naja. Fast. Um der Zweistelligkeit willen rechne ich mit 99 statt 100 als Maximum) Die 64 Werte ergeben dann den Fingerprint: 00 für weiss, 99 für Schwarz, 50 für "halb". Das mag sich umständlich lesen, da es aber auf Manipulationsmethoden in ImageMagick zurückgeht, läuft es schneller als ein perl-Eigenbau. Wenn ich zwei Bilder XOR überblende, finde ich ziemlich fix raus, wie ähnlich sich die abgebildeten Buchstaben sind. Und da es auf sw-Bilder optimiert ist, liefert es bessere Resultate als die ImageMagick-Bildvergleichsfunktion. Fast alles prima, also. Aber: Wenn ich das jetzt so durchlaufen lasse, kann ich anhand eines gescannten Bildes innerhalb einiger Stunden herausfinden, ob ich den abgebildeten Font habe. Es werden einfach ALLE Fonts aus einer vorsortierten Kategorie getestet, so ungefähr bis zu 80.000. Wenn es mir gelänge, vorher Fingerprints zu checken, liesse sich das auf ganz wenig Zeit reduzieren.
Ob es eine "komische_formel" in mysql gibt bezweifele ich, --> http://dev.mysql.com/doc/mysql/de/Functions.html du wirst dir wohl deinen eigenen Vergleichsalgorithmus, passen zu dem Fingerprint stricken müssen.
Da die Software herumpubliziert wird, ist das wohl zum scheitern verurteilt. Zumal C++ sich konsequent dem gelerntwerden widersetzt, die freche Sprache, die. ;) Aber Danke! Gruß, Ratti -- -o) fontlinge | Fontmanagement for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/