Esta es una captura de pantalla de un texto escrito en un editor de texto:
Este es el mismo texto en un tamaño más grande.
Observe cuán visible es el alias en letras con trazos diagonales prominentes como x
y z
. Este problema es una de las principales razones por las que las fuentes ráster han perdido popularidad en formatos "escalables" como TrueType.
Pero tal vez este no sea un problema inherente con las fuentes ráster, solo con la forma en que normalmente se implementa el escalado de ellas. Aquí hay una representación alternativa que usa interpolación bilineal simple combinada con umbral .
Esto es más suave, pero no ideal. Los trazos diagonales todavía están llenos de baches, y las letras curvas siguen c
y o
siguen siendo polígonos. Esto es especialmente notable en tamaños grandes.
Entonces, ¿hay una mejor manera?
La tarea
Escriba un programa que tome tres argumentos de línea de comandos.
resize INPUT_FILE OUTPUT_FILE SCALE_FACTOR
dónde
- INPUT_FILE es el nombre del archivo de entrada, que se supone que es un archivo de imagen que contiene texto negro sobre un fondo blanco. Puede usar cualquier formato de imagen ráster convencional (PNG, BMP, etc.) que sea conveniente.
- OUTPUT_FILE es el nombre del archivo de salida. Puede ser un formato de imagen ráster o vectorial. Puede introducir color si está haciendo algo de representación de subpíxeles tipo ClearType.
- SCALE_FACTOR es un valor positivo de punto flotante que indica cuánto se puede cambiar el tamaño de la imagen. Dado un archivo de entrada x × y px y un factor de escala s , la salida tendrá un tamaño de sx × sy px (redondeado a enteros).
Puede usar una biblioteca de procesamiento de imágenes de código abierto de tercer pary.
Además de su código, incluya ejemplos de salidas de su programa en factores de escala de 1.333, 1.5, 2, 3 y 4 usando mi primera imagen como entrada. También puede probarlo con otras fuentes, incluidas las proporcionalmente espaciadas.
Puntuación
Este es un concurso de popularidad. La entrada con el mayor número de votos positivos menos votos negativos gana. En caso de empate exacto, gana la entrada anterior.
Editar : Fecha límite extendida debido a la falta de entradas. TBA
Se alienta a los votantes a juzgar basándose principalmente en lo bien que se ven las imágenes de salida y, en segundo lugar, en la simplicidad / elegancia del algoritmo.
SCALE_FACTOR
Siempre es > 1?Respuestas:
Ruby, con RMagick
El algoritmo es muy simple: encuentre patrones de píxeles que se vean así:
y agregue triángulos para que se vean así:
Código:
Salidas (haga clic en cualquiera para ver la imagen sola):
1.333
1,5
2
3
4 4
fuente