Dies ist ein Screenshot von Text, der in einem Texteditor eingegeben wurde:
Dies ist der gleiche Text in einer größeren Größe.
Beachten Sie, wie sichtbar das Aliasing bei Buchstaben mit markanten diagonalen Strichen wie x
und ist z
. Dieses Problem ist ein Hauptgrund dafür, dass Raster-Schriftarten durch „skalierbare“ Formate wie TrueType an Popularität verloren haben.
Aber vielleicht ist dies kein inhärentes Problem bei Raster-Schriftarten, nur bei der Art und Weise, wie die Skalierung normalerweise implementiert wird. Hier ist ein alternatives Rendering mit einfacher bilinearer Interpolation in Kombination mit Schwellenwerten .
Dies ist reibungsloser, aber nicht ideal. Diagonale Striche sind immer noch holprig und gekrümmte Buchstaben mögen c
und o
sind immer noch Polygone. Dies macht sich insbesondere bei großen Größen bemerkbar.
Gibt es einen besseren Weg?
Die Aufgabe
Schreiben Sie ein Programm, das drei Befehlszeilenargumente akzeptiert.
resize INPUT_FILE OUTPUT_FILE SCALE_FACTOR
wo
- INPUT_FILE ist der Name der Eingabedatei, bei der es sich um eine Bilddatei handelt, die schwarzen Text auf weißem Hintergrund enthält. Sie können jedes gängige Rasterbildformat (PNG, BMP usw.) verwenden, das praktisch ist.
- OUTPUT_FILE ist der Name der Ausgabedatei. Es kann sich entweder um ein Raster- oder ein Vektorbildformat handeln. Sie können Farbe einführen, wenn Sie ein ClearType-ähnliches Subpixel-Rendering ausführen.
- SCALE_FACTOR ist ein positiver Gleitkommawert, der angibt, um wie viel die Bildgröße geändert werden kann. Bei einer x × y px-Eingabedatei und einem Skalierungsfaktor s hat die Ausgabe eine Größe von sx × sy px (auf ganze Zahlen gerundet).
Sie können eine Open-Source-Bildverarbeitungsbibliothek von Third Pary verwenden.
Fügen Sie zusätzlich zu Ihrem Code Beispielausgaben Ihres Programms mit Skalierungsfaktoren von 1,333, 1,5, 2, 3 und 4 hinzu, wobei Sie mein erstes Bild als Eingabe verwenden. Sie können es auch mit anderen Schriftarten versuchen, einschließlich Schriftarten mit proportionalem Abstand.
Wertung
Dies ist ein Beliebtheitswettbewerb. Der Eintrag mit der größten Anzahl von Upvotes minus Downvotes gewinnt. Bei einem genauen Gleichstand gewinnt der frühere Eintrag.
Bearbeiten : Frist wegen fehlender Einträge verlängert. TBA.
Die Wähler werden aufgefordert, in erster Linie anhand des Aussehens der Ausgabebilder und in zweiter Linie anhand der Einfachheit / Eleganz des Algorithmus zu beurteilen.
SCALE_FACTOR
immer> 1?Antworten:
Ruby mit RMagick
Der Algorithmus ist sehr einfach: Finden Sie Muster von Pixeln, die so aussehen:
und füge Dreiecke hinzu, damit sie so aussehen:
Code:
Ausgaben (klicken Sie auf eine beliebige Stelle, um das Bild selbst anzuzeigen):
1,333
1.5
2
3
4
quelle