Điền vào các lỗ trong các chữ cái


18

Đôi khi tôi buồn chán, tôi lấy một số văn bản và điền vào các "lỗ hổng" trong các chữ cái. Nhưng không phải việc lấp đầy lỗ hổng là điều nhàm chán nhất bạn có thể làm sao? Tôi nghĩ chúng ta nên tự động hóa nó , vì vậy chúng ta có thể sử dụng thời gian của mình tốt hơn.

Luật tiêu chuẩn được áp dụng.

Đầu vào

Một chuỗi chứa chuỗi các ký tự chữ và số (az, AZ, 0-9) và dấu cách.

Đầu ra

Hình ảnh chứa chuỗi kết xuất và lỗ trên nó được lấp đầy. Bạn có thể sử dụng bất kỳ phông chữ có thể đọc được của con người miễn là nó vẫn yêu cầu lấp đầy các lỗ hổng. Bạn có thể lưu hình ảnh vào tập tin i.png(ở định dạng png) hoặc chỉ hiển thị hình ảnh.

Thuộc tính hình ảnh:

  • Văn bản màu đen
  • Nền trắng hoặc trong suốt
  • Đệm:
    • Kích thước của hình ảnh có thể tối đa gấp hai lần kích thước của văn bản
    • Đệm phải cùng màu với nền, màu trắng hoặc trong suốt

Thí dụ

Đầu vào: Example text

Đầu ra: Ví dụ đầu ra


2
Liên quan. (cùng thử thách, ghi điểm khác nhau.)
Martin Ender

Có kích thước phông chữ tối thiểu cho các chữ cái (tính bằng pixel) không?
Martin Ender

Vâng, giả sử nó là 12px
Hannes Karppila

Câu trả lời:


18

Bash, 135 byte

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

Sử dụng ImageMagick ( convert).

Đầu ra mẫu:

mẫu vật

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

Vô hiệu hóa khử răng cưa là cần thiết bởi vì nếu không các phần bên trong của các chữ cái sẽ không được lấp đầy. Việc đặt phông chữ thành kích thước lớn cũng được yêu cầu vì một số phông chữ có "khoảng trống" trong các chữ cái nên có "lỗ hổng" ở kích thước phông chữ nhỏ (trong các thử nghiệm của tôi, akhông được điền ở kích thước phông chữ nhỏ mặc định).


8

Toán học, 83 byte

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

nhập mô tả hình ảnh ở đây

Một hàm không tên lấy một chuỗi làm đầu vào và trả về một đối tượng hình ảnh. Ý tưởng là để sử dụng DeleteBorderComponentsđể giữ chỉ các lỗ và sau đó trừ những từ ảnh gốc.


3
Điều buồn cười là Mathicala chiến thắng thường xuyên ngay cả với các tên dựng sẵn dài như ImageSubtractDeleteBorderComponents.
J Atkin

Đó là bởi vì Mathematica có các tên dựng sẵn cho nhiều thứ - bạn không cần phải tạo các hàm riêng của mình thường xuyên.
ASCII-chỉ

4

SmileBASIC, 38 byte

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

Vẽ văn bản * đen trên nền đen, sau đó sử dụng chức năng "thùng sơn" tích hợp để lấp đầy mọi thứ bên ngoài văn bản bằng màu trắng.
* (thực ra tôi đã sử dụng 00000008, trông giống hệt trong suốt, nhưng được coi là một màu khác)

nhập mô tả hình ảnh ở đây


2

Ăn xa văn bản một chút, nhưng cũng có một giải pháp dựa trên canvas:

JS, 610 byte

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)

nhập mô tả hình ảnh ở đây


2

Bản thảo 273

[ban đầu được đăng lên các thử thách liên quan , nhưng tôi chưa bao giờ thực hiện việc đếm.]

Hiển thị từng ký tự bình thường, để có khoảng cách chính xác để tiến lên, sau đó lấy tất cả các đường cong mô tả glyph và điền vào từng ký tự. Thông thường các đường cong bên trong và bên ngoài được mô tả với các hướng khác nhau, do đó, phần lấp đầy sẽ để trống bên trong, bất kể nó sử dụng quy tắc cuộn dây khác không hay quy tắc chẵn. Điền riêng, tất cả được điền.

/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

Thụt lề:

/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

Sử dụng. Đối tượng chuỗi dự kiến ​​sẽ nằm trên ngăn xếp khi chương trình bắt đầu. Mở rộng thêm chỉ để làm cho nó hiển thị.

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

snip từ đầu ra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.