fonts.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package base64Captcha
  2. import (
  3. "math/rand"
  4. "github.com/golang/freetype/truetype"
  5. )
  6. var fontsSimple = DefaultEmbeddedFonts.LoadFontsByNames([]string{
  7. "fonts/3Dumb.ttf",
  8. "fonts/ApothecaryFont.ttf",
  9. "fonts/Comismsh.ttf",
  10. "fonts/DENNEthree-dee.ttf",
  11. "fonts/DeborahFancyDress.ttf",
  12. "fonts/Flim-Flam.ttf",
  13. "fonts/RitaSmith.ttf",
  14. "fonts/actionj.ttf",
  15. "fonts/chromohv.ttf",
  16. })
  17. //var fontemoji = loadFontByName("fonts/seguiemj.ttf")
  18. var fontsAll = append(fontsSimple, fontChinese)
  19. var fontChinese = DefaultEmbeddedFonts.LoadFontByName("fonts/wqy-microhei.ttc")
  20. //randFontFrom choose random font family.选择随机的字体
  21. func randFontFrom(fonts []*truetype.Font) *truetype.Font {
  22. fontCount := len(fonts)
  23. if fontCount == 0 {
  24. //loading default fonts
  25. fonts = fontsAll
  26. fontCount = len(fontsAll)
  27. }
  28. index := rand.Intn(fontCount)
  29. return fonts[index]
  30. }
  31. var digitFontData = [][]byte{
  32. { // 0
  33. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  34. 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  35. 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
  36. 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
  37. 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
  38. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  39. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  40. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  41. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  42. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  43. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  44. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  45. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  46. 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  47. 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
  48. 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
  49. 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  50. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  51. },
  52. { // 1
  53. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  54. 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  55. 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
  56. 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  57. 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0,
  58. 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,
  59. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  60. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  61. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  62. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  63. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  64. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  65. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  66. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  67. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  68. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  69. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  70. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  71. },
  72. { // 2
  73. 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
  74. 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  75. 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
  76. 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  77. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  78. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  79. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  80. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  81. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  82. 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
  83. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  84. 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  85. 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
  86. 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
  87. 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
  88. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  89. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  90. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  91. },
  92. { // 3
  93. 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
  94. 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  95. 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  96. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  97. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  98. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  99. 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
  100. 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
  101. 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  102. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  103. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  104. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  105. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  106. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  107. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  108. 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  109. 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  110. 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
  111. },
  112. { // 4
  113. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  114. 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
  115. 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
  116. 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,
  117. 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,
  118. 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
  119. 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
  120. 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0,
  121. 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
  122. 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0,
  123. 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  124. 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  125. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  126. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  127. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  128. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  129. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  130. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  131. },
  132. { // 5
  133. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
  134. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
  135. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  136. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  137. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  138. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  139. 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
  140. 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  141. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  142. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  143. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  144. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  145. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  146. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  147. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  148. 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  149. 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  150. 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
  151. },
  152. { // 6
  153. 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
  154. 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
  155. 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
  156. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  157. 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  158. 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  159. 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0,
  160. 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
  161. 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0,
  162. 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
  163. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  164. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  165. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  166. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  167. 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
  168. 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
  169. 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  170. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  171. },
  172. { // 7
  173. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  174. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  175. 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
  176. 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  177. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  178. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  179. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  180. 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
  181. 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
  182. 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
  183. 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
  184. 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
  185. 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
  186. 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
  187. 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
  188. 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
  189. 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
  190. 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
  191. },
  192. { // 8
  193. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  194. 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
  195. 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
  196. 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
  197. 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
  198. 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
  199. 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
  200. 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  201. 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
  202. 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0,
  203. 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
  204. 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
  205. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  206. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  207. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  208. 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0,
  209. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
  210. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  211. },
  212. { // 9
  213. 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
  214. 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
  215. 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0,
  216. 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  217. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  218. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  219. 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  220. 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
  221. 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
  222. 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
  223. 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1,
  224. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  225. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  226. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
  227. 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
  228. 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
  229. 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
  230. 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
  231. },
  232. }