2
0

createqrcode.pp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. program createqrcode;
  2. {$mode objfpc}
  3. {$H+}
  4. uses
  5. Classes, SysUtils, CustApp, fpimage, fpqrcodegen, fpimgqrcode,
  6. fpwritepng,fpwritebmp,fpwritexpm, FPWriteJPEG, FPWritePCX,
  7. FPWritePNM, FPWriteTIFF;
  8. type
  9. { TCreateQRApplication }
  10. TCreateQRApplication = class(TCustomApplication)
  11. Private
  12. FText : UTF8String;
  13. Foutput : String;
  14. FGenerator : TImageQRCodeGenerator;
  15. protected
  16. function ParseOptions : Boolean;
  17. procedure DoRun; override;
  18. public
  19. constructor Create(TheOwner: TComponent); override;
  20. Destructor Destroy; override;
  21. procedure WriteHelp(Msg : String); virtual;
  22. end;
  23. { TCreateQRApplication }
  24. function TCreateQRApplication.ParseOptions: Boolean;
  25. Var
  26. ErrorMsg : String;
  27. begin
  28. Result:=False;
  29. ErrorMsg:=CheckOptions('b:ht:o:m:ep:', ['help','text:','output:','mask:','error-correctionlevel:','pixel-size','border']);
  30. if (ErrorMsg<>'') or HasOption('h','help') then
  31. begin
  32. WriteHelp(ErrorMsg);
  33. Exit;
  34. end;
  35. FText:=GetOptionValue('t','text');
  36. FGenerator.PixelSize:=StrToIntDef(GetOptionValue('p','pixel-size'),4);
  37. FGenerator.Border:=StrToIntDef(GetOptionValue('b','border'),0);
  38. FOutput:=GetOptionValue('o','output');
  39. if Foutput='' then
  40. Foutput:='qrcode.png';
  41. Case LowerCase(GetOptionValue('e','error-correctionlevel')) of
  42. 'low' : FGenerator.ErrorCorrectionLevel:=EccLOW;
  43. 'high' : FGenerator.ErrorCorrectionLevel:=EccHigh;
  44. 'medium' : FGenerator.ErrorCorrectionLevel:=EccMEDIUM;
  45. 'quartile' : FGenerator.ErrorCorrectionLevel:=EccQUARTILE;
  46. else
  47. FGenerator.ErrorCorrectionLevel:=EccMEDIUM;
  48. end;
  49. Case LowerCase(GetOptionValue('m','mask')) of
  50. '0' : FGenerator.Mask:=mp0;
  51. '1' : FGenerator.Mask:=mp1;
  52. '2' : FGenerator.Mask:=mp2;
  53. '3' : FGenerator.Mask:=mp3;
  54. '4' : FGenerator.Mask:=mp4;
  55. '5' : FGenerator.Mask:=mp5;
  56. '6' : FGenerator.Mask:=mp6;
  57. '7' : FGenerator.Mask:=mp7;
  58. else
  59. FGenerator.Mask:=mpAuto;
  60. end;
  61. Result:=True;
  62. end;
  63. procedure TCreateQRApplication.DoRun;
  64. begin
  65. Terminate;
  66. // quick check parameters
  67. if not ParseOptions then
  68. exit;
  69. FGenerator.Generate(FText);
  70. FGenerator.SaveToFile(Foutput);
  71. Terminate;
  72. end;
  73. constructor TCreateQRApplication.Create(TheOwner: TComponent);
  74. begin
  75. inherited Create(TheOwner);
  76. StopOnException:=True;
  77. FGenerator:=TImageQRCodeGenerator.Create;
  78. end;
  79. destructor TCreateQRApplication.Destroy;
  80. begin
  81. FreeAndNil(FGenerator);
  82. inherited Destroy;
  83. end;
  84. procedure TCreateQRApplication.WriteHelp(Msg : string);
  85. begin
  86. if (Msg<>'') then
  87. Writeln('Error : ',Msg);
  88. writeln('Usage: ', ExeName, ' -h');
  89. end;
  90. var
  91. Application: TCreateQRApplication;
  92. begin
  93. Application:=TCreateQRApplication.Create(nil);
  94. Application.Title:='Create QR code';
  95. Application.Run;
  96. Application.Free;
  97. end.