เติมตัวอักษรเป็นรู


18

บางครั้งเมื่อฉันเบื่อฉันใช้ข้อความและกรอก "ช่อง" ในตัวอักษร แต่ไม่ได้เติมสิ่งที่น่าเบื่อที่สุดที่คุณทำได้? ฉันคิดว่าเราควรทำให้เป็นอัตโนมัติดังนั้นเราจึงสามารถใช้เวลาของเราให้ดีขึ้นได้

ใช้กฎมาตรฐานของ

อินพุต

สตริงที่มีลำดับของตัวอักษรและตัวเลข (az, AZ, 0-9) และช่องว่าง

เอาท์พุต

รูปภาพประกอบด้วยสตริงที่เรนเดอร์และมีรูเต็ม คุณสามารถใช้แบบอักษรใด ๆ ที่มนุษย์สามารถอ่านได้ตราบเท่าที่ยังต้องการการเติมช่องว่าง คุณสามารถบันทึกภาพเป็นไฟล์i.png(ในรูปแบบ png) หรือเพียงแค่แสดงภาพ

คุณสมบัติรูปภาพ:

  • ข้อความสีดำ
  • พื้นหลังสีขาวหรือโปร่งใส
  • การขยายความ:
    • ขนาดของรูปภาพสามารถมีขนาดได้สูงสุดสองเท่าของขนาดข้อความ
    • การขยายควรมีสีเดียวกับพื้นหลังทั้งสีขาวหรือโปร่งใส

ตัวอย่าง

การป้อนข้อมูล: Example text

เอาท์พุท: ตัวอย่างผลลัพธ์


2
ที่เกี่ยวข้อง (ความท้าทายเดียวกันการให้คะแนนที่แตกต่าง)
Martin Ender

มีขนาดแบบอักษรขั้นต่ำสำหรับตัวอักษร (เป็นพิกเซล) หรือไม่
Martin Ender

ใช่บอกว่ามันคือ 12px
Hannes Karppila

คำตอบ:


18

Bash, 135 ไบต์

convert +antialias -pointsize 99 label:$1 -fill red -draw 'color 0,0 floodfill' -fill black -opaque white -fill white -opaque red i.png

ใช้ ImageMagick ( convert)

ตัวอย่างผลลัพธ์:

ตัวอย่าง

convert
  +antialias                              # disable antialiasing
  -pointsize 99                           # annoyingly necessary (see below)
  label:$1                                # draw input text
  -fill red -draw 'color 0,0 floodfill'   # flood fill from (0,0) with red
  -fill black -opaque white               # replace all white with black
  -fill white -opaque red                 # replace all red with white
  i.png

จำเป็นต้องปิดการใช้งานการลดรอยหยักเพราะมิฉะนั้นส่วนการลดรอยหยักภายในตัวอักษรจะไม่ทำให้น้ำท่วม การตั้งค่าตัวอักษรให้มีขนาดใหญ่เป็นสิ่งจำเป็นเพราะแบบอักษรบางคนมี "ช่องว่าง" ในตัวอักษรที่ควรมี "หลุม" ในพวกเขาที่มีขนาดตัวอักษรขนาดเล็ก (ในการทดสอบของผมaก็ไม่ได้เต็มไปด้วยขนาดเริ่มต้นที่ตัวอักษรขนาดเล็ก)


8

Mathematica, 83 ไบต์

ImageSubtract[s=Binarize@Rasterize@Style[#,FontSize->99],DeleteBorderComponents@s]&

ป้อนคำอธิบายรูปภาพที่นี่

ฟังก์ชั่นที่ไม่มีชื่อที่ใช้สตริงเป็นอินพุตและส่งกลับวัตถุภาพ แนวคิดคือการใช้DeleteBorderComponentsเพื่อเก็บเฉพาะหลุมแล้วลบออกจากภาพต้นฉบับ


3
สิ่งที่ตลกคือว่า Mathematica ชนะมักจะมีชื่อในตัวยาวเหมือนและImageSubtract DeleteBorderComponents
J Atkin

นั่นเป็นเพราะ Mathematica มีชื่อในตัวสำหรับหลาย ๆ สิ่ง - คุณไม่จำเป็นต้องสร้างฟังก์ชั่นของตัวเองบ่อยๆ
ASCII เท่านั้นเท่านั้น

4

SmileBASIC ขนาด 38 ไบต์

??INPUT S$GPUTCHR.,2,S$,2,2,8GPAINT.,0

วาดข้อความสีดำ * บนพื้นหลังสีดำจากนั้นใช้ฟังก์ชั่น "ถังสี" เพื่อเติมทุกสิ่งที่อยู่นอกข้อความด้วยสีขาว
* (จริง ๆ แล้วฉันใช้00000008ซึ่งดูเหมือนโปร่งใส แต่ถือว่าเป็นสีอื่น)

ป้อนคำอธิบายรูปภาพที่นี่


2

กินข้อความนิดหน่อย แต่ก็มีวิธีแก้ปัญหาแบบผ้าใบ:

JS, 610 ไบต์

function o(a,b){return a[b]+a[b+1]+a[b+2]}x=prompt();l=x.length;c=document.createElement("canvas");document.body.appendChild(c);h=33;w=18*l;c.height=h;c.width=w;n=255;m=764;t=c.getContext("2d");t.fillStyle="white";t.fillRect(0,0,w,h);t.fillStyle="red";t.fillRect(0,2,w,h);t.font="900 30px Courier";t.fillStyle="black";t.fillText(x,0,25);d=t.getImageData(0,0,w,h);f=0;q=d.data.length;for(i=0;i<20;i++){for(j=0;j<q;j+=4){f=d.data;if(o(f,j)>0&&(o(f,j-w*4)>m||o(f,j+w*4)>m||o(f,j-4)>m||o(f,j+4)>m)){f[j]=n;f[j+1]=n;f[j+2]=n}}}for(k=0;k<q;k+=4){f=d.data;if(f[k+1]<1){f[k]=0;f[k+1]=0;f[k+2]=0}}t.putImageData(d,0,0)

ป้อนคำอธิบายรูปภาพที่นี่


2

Postscript 273

[แต่เดิมถูกโพสต์ไปยังความท้าทายที่เกี่ยวข้องแต่ฉันไม่เคยใช้การนับ]

วาทกรรมตัวละครแต่ละตัวตามปกติเพื่อให้ได้ระยะห่างที่ถูกต้องเพื่อเลื่อนจากนั้นใช้เส้นโค้งทั้งหมดที่อธิบายถึงสัญลักษณ์และเติมแต่ละตัว โดยปกติแล้วเส้นโค้งภายในและภายนอกจะอธิบายด้วยทิศทางที่แตกต่างกันดังนั้นการเติมจะปล่อยให้การตกแต่งภายในว่างเปล่าไม่ว่าจะใช้กฎที่ไม่เป็นศูนย์หรือกฎที่คี่ เติมแยกต่างหากมันทั้งหมดได้รับการเติม

/Courier 9 selectfont
9 9 moveto{( ) dup 0 4 3 roll put currentpoint 3 2 roll
dup show currentpoint 3 2 roll 5 3 roll moveto
true charpath[[{/moveto
cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx]cvx[}pathforall
pop]]{exec currentpoint fill moveto}forall pop moveto}forall

เยื้อง:

/Courier 9 selectfont
9 9 moveto
{
    ( ) dup 0 4 3 roll put
    currentpoint 3 2 roll
    dup show
    currentpoint 3 2 roll
    5 3 roll moveto
    true charpath
    [ [{/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx]cvx[}
       pathforall pop] ]
    { exec currentpoint fill moveto } forall
    pop moveto
} forall

การใช้ คาดว่าวัตถุสตริงจะอยู่ในสแต็กเมื่อโปรแกรมเริ่มทำงาน การปรับสเกลพิเศษเพียงเพื่อให้มองเห็นได้

$ gs -c '7 7 scale(Example Text)' -f courier.ps

ตัดจากเอาต์พุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.