अक्षरों में छेद भरें


18

कभी-कभी जब मैं ऊब जाता हूं, तो मैं कुछ पाठ लेता हूं और पत्रों में "छेद" भरता हूं। लेकिन छिद्रों को भरना नहीं है जो आप कर सकते हैं? मुझे लगता है कि हमें इसे स्वचालित करना चाहिए , इसलिए हम अपने समय का बेहतर उपयोग कर सकते हैं।

मानक नियम लागू होते हैं।

इनपुट

एक स्ट्रिंग जिसमें अल्फ़ान्यूमेरिक वर्ण (az, AZ, 0-9) और रिक्त स्थान होते हैं।

उत्पादन

स्ट्रिंग युक्त छवि और उस पर छेद भरे हुए हैं। आप किसी भी मानव पठनीय फ़ॉन्ट का उपयोग तब तक कर सकते हैं जब तक उसे छेद भरने की आवश्यकता होती है। आप या तो छवि को फ़ाइल i.png(png प्रारूप में) में सहेज सकते हैं या केवल छवि प्रदर्शित कर सकते हैं।

छवि गुण:

  • काला पाठ
  • सफेद या पारदर्शी पृष्ठभूमि
  • गद्दी:
    • छवि के आयाम पाठ के आयामों का अधिकतम दो गुना हो सकते हैं
    • पैडिंग पृष्ठभूमि या तो सफेद या पारदर्शी रंग के समान होनी चाहिए

उदाहरण

इनपुट: Example text

आउटपुट: उदाहरण आउटपुट


2
सम्बंधित। (एक ही चुनौती, अलग स्कोरिंग।)
मार्टिन एंडर

क्या अक्षरों के लिए एक न्यूनतम फ़ॉन्ट आकार है (पिक्सेल में)?
मार्टिन एंडर

हां, यह कहते हैं कि यह 12px है
हेंस कारपिला

जवाबों:


18

बैश, 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

मैथेमेटिका, 83 बाइट्स

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

यहाँ छवि विवरण दर्ज करें

एक अनाम फ़ंक्शन जो इनपुट के रूप में एक स्ट्रिंग लेता है और एक छवि ऑब्जेक्ट देता है। विचार केवल छेद DeleteBorderComponentsरखने के लिए उपयोग करना है और फिर मूल छवि से उन लोगों को निकालना है।


3
मजेदार बात यह है कि मैथेमेटिका कई बार लंबे बिलियन नामों जैसे ImageSubtractऔर के साथ भी जीतता है DeleteBorderComponents
जे एटकिन

ऐसा इसलिए है क्योंकि गणितज्ञ ने कई चीजों के लिए नाम बनाए हैं - आपको अक्सर अपने कार्यों को बनाने की आवश्यकता नहीं होती है।
केवल

4

स्माइलबासिक, 38 बाइट्स

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

काली पृष्ठभूमि पर काला * पाठ खींचता है, फिर पाठ के बाहर सब कुछ सफेद के साथ भरने के लिए "पेंट बाल्टी" फ़ंक्शन में निर्मित का उपयोग करता है।
* (वास्तव में मैंने इस्तेमाल किया था 00000008, जो पारदर्शी के समान दिखता है, लेकिन एक अलग रंग के रूप में माना जाता है)

यहाँ छवि विवरण दर्ज करें


2

पाठ को थोड़ा सा हटाता है, लेकिन एक कैनवास-आधारित समाधान भी है:

जेएस, 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

पोस्टस्क्रिप्ट 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

उत्पादन से स्निप

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.