Voici une capture d'écran d'un texte tapé dans un éditeur de texte:
Il s'agit du même texte à une plus grande taille.
Remarquez à quel point l' aliasing est visible sur les lettres avec des traits diagonaux proéminents comme x
et z
. Ce problème est l'une des principales raisons pour lesquelles les polices raster ont perdu leur popularité au profit de formats «évolutifs» comme TrueType.
Mais ce n'est peut-être pas un problème inhérent aux polices raster, juste avec la manière dont la mise à l'échelle est généralement implémentée. Voici un rendu alternatif utilisant une simple interpolation bilinéaire combinée à un seuillage .
C'est plus fluide, mais pas idéal. Les traits diagonaux sont toujours cahoteux et les lettres courbes aiment c
et o
sont toujours des polygones. Cela est particulièrement visible dans les grandes tailles.
Alors, y a-t-il une meilleure façon?
La tâche
Écrivez un programme qui accepte trois arguments de ligne de commande.
resize INPUT_FILE OUTPUT_FILE SCALE_FACTOR
où
- INPUT_FILE est le nom du fichier d'entrée, qui est supposé être un fichier image contenant du texte noir sur fond blanc. Vous pouvez utiliser n'importe quel format d'image raster courant (PNG, BMP, etc.) qui soit pratique.
- OUTPUT_FILE est le nom du fichier de sortie. Il peut s'agir d'un format d'image raster ou vectorielle. Vous pouvez introduire la couleur si vous effectuez un rendu de sous-pixel de type ClearType.
- SCALE_FACTOR est une valeur à virgule flottante positive qui indique dans quelle mesure l'image peut être redimensionnée. Étant donné un fichier d'entrée x × y px et un facteur d'échelle s , la sortie aura une taille de sx × sy px (arrondie aux entiers).
Vous pouvez utiliser une bibliothèque de traitement d'images open source de troisième partie.
En plus de votre code, incluez des exemples de sorties de votre programme à des facteurs d'échelle de 1,333, 1,5, 2, 3 et 4 en utilisant ma première image comme entrée. Vous pouvez également l'essayer avec d'autres polices, y compris celles à espacement proportionnel.
Notation
Il s'agit d'un concours de popularité. L'entrée avec le plus grand nombre de votes positifs moins les votes négatifs gagne. En cas d'égalité exacte, l'entrée précédente l'emporte.
Edit : Délai prolongé en raison du manque d'entrées. TBA.
Les électeurs sont encouragés à juger principalement en fonction de la qualité des images de sortie et, en second lieu, de la simplicité / élégance de l'algorithme.
SCALE_FACTOR
toujours> 1?Réponses:
Ruby, avec RMagick
L'algorithme est très simple - trouvez des motifs de pixels qui ressemblent à ceci:
et ajoutez des triangles pour les faire ressembler à ceci:
Code:
Sorties (cliquez sur n'importe laquelle pour afficher l'image par elle-même):
1,333
1,5
2
3
4
la source