Ini adalah tangkapan layar dari beberapa teks yang diketik dalam editor teks:
Ini adalah teks yang sama dengan ukuran yang lebih besar.
Perhatikan betapa terlihatnya aliasing pada huruf dengan goresan diagonal yang menonjol seperti x
dan z
. Masalah ini adalah alasan utama mengapa font raster telah kehilangan popularitas karena format "scalable" seperti TrueType.
Tapi mungkin ini bukan masalah inheren dengan font raster, hanya dengan cara penskalaannya yang biasanya diterapkan. Berikut ini adalah render alternatif menggunakan interpolasi bilinear sederhana dikombinasikan dengan ambang batas .
Ini lebih halus, tetapi tidak ideal. Sapuan diagonal masih bergelombang, dan huruf melengkung suka c
dan o
masih poligon. Ini terutama terlihat pada ukuran besar.
Jadi adakah cara yang lebih baik?
Tugas
Tulis program yang membutuhkan tiga argumen baris perintah.
resize INPUT_FILE OUTPUT_FILE SCALE_FACTOR
dimana
- INPUT_FILE adalah nama file input, yang diasumsikan sebagai file gambar yang berisi teks hitam pada latar belakang putih. Anda dapat menggunakan format gambar raster utama (PNG, BMP, dll.) Yang sesuai.
- OUTPUT_FILE adalah nama file output. Ini bisa berupa format gambar raster atau vektor. Anda dapat memperkenalkan warna jika Anda melakukan rendering subpixel seperti ClearType.
- SCALE_FACTOR adalah nilai titik-mengambang positif yang menunjukkan seberapa besar ukuran gambar dapat diubah. Diberikan file input x × y px dan faktor penskalaan s , output akan memiliki ukuran sx × sy px (dibulatkan menjadi bilangan bulat).
Anda dapat menggunakan pustaka pemrosesan gambar sumber terbuka pary ketiga.
Selain kode Anda, sertakan contoh output program Anda dengan faktor skala 1,333, 1,5, 2, 3, dan 4 menggunakan gambar pertama saya sebagai input. Anda juga dapat mencobanya dengan font lain, termasuk yang spasi proporsional.
Mencetak gol
Ini adalah kontes popularitas. Entri dengan jumlah upvote terbesar dikurangi dengan downvotes menang. Dalam kasus dasi yang tepat, entri sebelumnya menang.
Sunting : Batas waktu diperpanjang karena kurangnya entri. TBA.
Pemilih didorong untuk menilai terutama berdasarkan seberapa baik gambar output terlihat, dan yang kedua pada kesederhanaan / keanggunan algoritma.
SCALE_FACTOR
selalu> 1?Jawaban:
Ruby, dengan RMagick
Algoritma ini sangat sederhana — temukan pola piksel yang terlihat seperti ini:
dan tambahkan segitiga untuk membuat mereka terlihat seperti ini:
Kode:
Keluaran (klik apa saja untuk melihat gambar dengan sendirinya):
1.333
1.5
2
3
4
sumber