example6.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include <stdio.h>
  2. #include <libcaptcha.h>
  3. lc_bmp *load_pattern(char *filename, int x, int y, int w, int h) {
  4. lc_bmp *img = lc_load_png(filename);
  5. lc_bmp *cropped;
  6. if (!img) {
  7. perror("lc_load_png()");
  8. return NULL;
  9. }
  10. cropped = lc_crop_bmp(img, x, y, w, h);
  11. if (!cropped) {
  12. perror("lc_crop_bmp()");
  13. return NULL;
  14. }
  15. lc_free(img);
  16. return cropped;
  17. }
  18. int main() {
  19. char * str = "CRAZYSTUFF";
  20. char * fontfile = "../ttf/dejavu.ttf";
  21. lc_fontBuffer *font = lc_create_font(fontfile);
  22. lc_arrGlyph *tmp;
  23. lc_arrGlyph *arr;
  24. lc_bmp * text;
  25. lc_bmp * pattern;
  26. lc_bmp * bg;
  27. lc_bmp * bmp;
  28. lc_bmp * captcha;
  29. if (!font) {
  30. perror("lc_create_font()");
  31. return 1;
  32. }
  33. tmp = lc_str_to_arr(font, str, 50, 70);
  34. if (!tmp) {
  35. perror("lc_str_to_arr()");
  36. return 1;
  37. }
  38. arr = lc_randomize_arr_rotation(tmp, 180);
  39. if (!arr) {
  40. perror("lc_randomize_arr_rotation()");
  41. return 1;
  42. }
  43. lc_randomize_arr_x(arr, 10);
  44. lc_randomize_arr_y(arr, 10);
  45. text = lc_create_image(arr);
  46. if (!text) {
  47. perror("lc_create_image()");
  48. return 1;
  49. }
  50. pattern = load_pattern("../patterns/96b.png", 100, 200, text->w, text->h);
  51. if (!pattern) {
  52. return 1;
  53. }
  54. bg = load_pattern("../patterns/96c.png", 300, 20, pattern->w + 20, pattern->h + 20);
  55. if (!bg) {
  56. return 1;
  57. }
  58. bmp = lc_pattern_apply(pattern, text);
  59. if (!bmp) {
  60. perror("lc_pattern_apply()");
  61. return 1;
  62. }
  63. captcha = lc_pattern_merge(bg, bmp, 10, 10);
  64. if (!captcha) {
  65. perror("lc_pattern_merge()");
  66. return 1;
  67. }
  68. lc_save_png("./example6.png", captcha);
  69. lc_free(tmp);
  70. lc_free(captcha);
  71. lc_free(bg);
  72. lc_free(text);
  73. lc_free(pattern);
  74. lc_free(arr);
  75. lc_free(bmp);
  76. lc_free(font);
  77. return 0;
  78. }