Code 128 - Barcode generator

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Code 128 - Barcode generator

Beitrag von 125 »

Moin,
ich hab heute nach längerer Zeit mal wieder was mit PB gemacht und dachte das wäre vielleicht auch für andere brauchbar :)
Hier mein Code128 Generator:

Code: Alles auswählen

;------------------------
; Barcode Generator
; v0.1 by 125
; Public Domain
;------------------------

UsePNGImageEncoder()

#BWidth = 1
#BLength = 60
#BDepth = 32

Global Dim CTable.s(106)
CTable(0)="212222"
CTable(1)="222122"
CTable(2)="222221"
CTable(3)="121223"
CTable(4)="121322"
CTable(5)="131222"
CTable(6)="122213"
CTable(7)="122312"
CTable(8)="132212"
CTable(9)="221213"
CTable(10)="221312"
CTable(11)="231212"
CTable(12)="112232"
CTable(13)="122132"
CTable(14)="122231"
CTable(15)="113222"
CTable(16)="123122"
CTable(17)="123221"
CTable(18)="223211"
CTable(19)="221132"
CTable(20)="221231"
CTable(21)="213212"
CTable(22)="223112"
CTable(23)="312131"
CTable(24)="311222"
CTable(25)="321122"
CTable(26)="321221"
CTable(27)="312212"
CTable(28)="322112"
CTable(29)="322211"
CTable(30)="212123"
CTable(31)="212321"
CTable(32)="232121"
CTable(33)="111323"
CTable(34)="131123"
CTable(35)="131321"
CTable(36)="112313"
CTable(37)="132113"
CTable(38)="132311"
CTable(39)="211313"
CTable(40)="231113"
CTable(41)="231311"
CTable(42)="112133"
CTable(43)="112331"
CTable(44)="132131"
CTable(45)="113123"
CTable(46)="113321"
CTable(47)="133121"
CTable(48)="313121"
CTable(49)="211331"
CTable(50)="231131"
CTable(51)="213113"
CTable(52)="213311"
CTable(53)="213131"
CTable(54)="311123"
CTable(55)="311321"
CTable(56)="331121"
CTable(57)="312113"
CTable(58)="312311"
CTable(59)="332111"
CTable(60)="314111"
CTable(61)="221411"
CTable(62)="431111"
CTable(63)="111224"
CTable(64)="111422"
CTable(65)="121124"
CTable(66)="121421"
CTable(67)="141122"
CTable(68)="141221"
CTable(69)="112214"
CTable(70)="112412"
CTable(71)="122114"
CTable(72)="122411"
CTable(73)="142112"
CTable(74)="142211"
CTable(75)="241211"
CTable(76)="221114"
CTable(77)="413111"
CTable(78)="241112"
CTable(79)="134111"
CTable(80)="111242"
CTable(81)="121142"
CTable(82)="121241"
CTable(83)="114212"
CTable(84)="124112"
CTable(85)="124211"
CTable(86)="411212"
CTable(87)="421112"
CTable(88)="421211"
CTable(89)="212141"
CTable(90)="214121"
CTable(91)="412121"
CTable(92)="111143"
CTable(93)="111341"
CTable(94)="131141"
CTable(95)="114113"
CTable(96)="114311"
CTable(97)="411113"
CTable(98)="411311"
CTable(99)="113141"
CTable(100)="114131"
CTable(101)="311141"
CTable(102)="411131"
CTable(103)="211412"
CTable(104)="211214"
CTable(105)="211232"
CTable(106)="2331112"

Procedure GenerateCodeMage(ToCode.s,BWidth,BLength,BDepth)
  BImage = 1
  x = 0
  y = 0
  CreateImage(BImage, (Len(ToCode) + 2) * 15 * BWidth, BLength,BDepth)
   StartDrawing(ImageOutput(BIMage))
     Box(x,y,ImageWidth(BIMage),ImageHeight(BIMage),$FFFFFF)
     char = 104
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next    
     check = 104
     For a = 0 To Len(ToCode) - 1
       char =  Asc(PeekS(@ToCode+a,1))-32
       check = check + (char * (a+1))
       If char >= 0 And char <= 106
         For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
         Next
       EndIf
     Next
     char = check%103
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next 
     char = 106
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next
   StopDrawing()    
   GrabImage(BImage, BImage, 0, 0, x, BLength)
   BImage2 = CreateImage(#PB_Any,ImageWidth(BImage)+100,ImageHeight(BImage),BDepth)
   StartDrawing(ImageOutput(BImage2))
    Box(0,0,ImageWidth(BImage2),ImageHeight(BImage2),$FFFFFF)
    DrawImage(ImageID(BImage),50,0)
   StopDrawing()
   ProcedureReturn BImage2
EndProcedure


Input.s = InputRequester("Barcode Generator","Bitte Message zum Codieren eingeben!","")

Image = GenerateCodeMage(Input,#BWidth,#BLength,#BDepth)

SaveImage(Image,SaveFileRequester("Wo?","","*.png|*.png",0), #PB_ImagePlugin_PNG)
MfG
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Re: Code 128 - Barcode generator

Beitrag von zigapeda »

Hey Alex,

genau das richtige timing, den code koennen wir gerade bei unserem projekt brauchen
sehr nice.

mfg daniel
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Code 128 - Barcode generator

Beitrag von hjbremer »

Kann man bestimmt mal gebrauchen :allright:

aber warum Imagetiefe 32 ? mal so gefragt
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Code 128 - Barcode generator

Beitrag von DarkDragon »

Ui, gleich 2 von denen die hier nach langer Zeit mal wieder was schreiben: 125 und zigapeda. :shock: :allright:

Ich hab jetzt keine lust das von Hand zu dekodieren was ich da eingegeben hab, aber wenn 's stimmt, dann ist 's ja toll ;-) . Dann können wir ja jetzt unseren eigenen PureBasic Supermarkt aufbauen und schonmal Etiketten drucken. :lol:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
haggi
Beiträge: 77
Registriert: 04.01.2007 21:54

Re: Code 128 - Barcode generator

Beitrag von haggi »

Hi,

genau das was ich brauche, kann man den barkode auch vedrtikal ausgeben? was müsste hierbei verändert werden? vielen dank bereits im voraus, und für dieses coole projekt!

gruß haggi
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Code 128 - Barcode generator

Beitrag von cxAlex »

haggi hat geschrieben:Hi,

genau das was ich brauche, kann man den barkode auch vedrtikal ausgeben? was müsste hierbei verändert werden? vielen dank bereits im voraus, und für dieses coole projekt!

gruß haggi
Ich würde dafür nicht den Algo verändern sondern einfach eine Bild-Rotations Routine hinten dran schalten, solltes du im Forum zuhauf finden :)


//Edit: Hab schnell was gebastelt, nicht der schnellste Algo aber reicht für die kleinen Barcodes:

Code: Alles auswählen

;------------------------
; Barcode Generator
; v0.1 by 125
; Public Domain
;------------------------

UsePNGImageEncoder()

#BWidth = 1
#BLength = 60
#BDepth = 32

Global Dim CTable.s(106)
CTable(0)="212222"
CTable(1)="222122"
CTable(2)="222221"
CTable(3)="121223"
CTable(4)="121322"
CTable(5)="131222"
CTable(6)="122213"
CTable(7)="122312"
CTable(8)="132212"
CTable(9)="221213"
CTable(10)="221312"
CTable(11)="231212"
CTable(12)="112232"
CTable(13)="122132"
CTable(14)="122231"
CTable(15)="113222"
CTable(16)="123122"
CTable(17)="123221"
CTable(18)="223211"
CTable(19)="221132"
CTable(20)="221231"
CTable(21)="213212"
CTable(22)="223112"
CTable(23)="312131"
CTable(24)="311222"
CTable(25)="321122"
CTable(26)="321221"
CTable(27)="312212"
CTable(28)="322112"
CTable(29)="322211"
CTable(30)="212123"
CTable(31)="212321"
CTable(32)="232121"
CTable(33)="111323"
CTable(34)="131123"
CTable(35)="131321"
CTable(36)="112313"
CTable(37)="132113"
CTable(38)="132311"
CTable(39)="211313"
CTable(40)="231113"
CTable(41)="231311"
CTable(42)="112133"
CTable(43)="112331"
CTable(44)="132131"
CTable(45)="113123"
CTable(46)="113321"
CTable(47)="133121"
CTable(48)="313121"
CTable(49)="211331"
CTable(50)="231131"
CTable(51)="213113"
CTable(52)="213311"
CTable(53)="213131"
CTable(54)="311123"
CTable(55)="311321"
CTable(56)="331121"
CTable(57)="312113"
CTable(58)="312311"
CTable(59)="332111"
CTable(60)="314111"
CTable(61)="221411"
CTable(62)="431111"
CTable(63)="111224"
CTable(64)="111422"
CTable(65)="121124"
CTable(66)="121421"
CTable(67)="141122"
CTable(68)="141221"
CTable(69)="112214"
CTable(70)="112412"
CTable(71)="122114"
CTable(72)="122411"
CTable(73)="142112"
CTable(74)="142211"
CTable(75)="241211"
CTable(76)="221114"
CTable(77)="413111"
CTable(78)="241112"
CTable(79)="134111"
CTable(80)="111242"
CTable(81)="121142"
CTable(82)="121241"
CTable(83)="114212"
CTable(84)="124112"
CTable(85)="124211"
CTable(86)="411212"
CTable(87)="421112"
CTable(88)="421211"
CTable(89)="212141"
CTable(90)="214121"
CTable(91)="412121"
CTable(92)="111143"
CTable(93)="111341"
CTable(94)="131141"
CTable(95)="114113"
CTable(96)="114311"
CTable(97)="411113"
CTable(98)="411311"
CTable(99)="113141"
CTable(100)="114131"
CTable(101)="311141"
CTable(102)="411131"
CTable(103)="211412"
CTable(104)="211214"
CTable(105)="211232"
CTable(106)="2331112"

Procedure GenerateCodeMage(ToCode.s,BWidth,BLength,BDepth)
  BImage = 1
  x = 0
  y = 0
  CreateImage(BImage, (Len(ToCode) + 2) * 15 * BWidth, BLength,BDepth)
   StartDrawing(ImageOutput(BIMage))
     Box(x,y,ImageWidth(BIMage),ImageHeight(BIMage),$FFFFFF)
     char = 104
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next    
     check = 104
     For a = 0 To Len(ToCode) - 1
       char =  Asc(PeekS(@ToCode+a,1))-32
       check = check + (char * (a+1))
       If char >= 0 And char <= 106
         For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
         Next
       EndIf
     Next
     char = check%103
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next 
     char = 106
     For b = 0 To Len(CTable(char)) - 1
           If b%2 = 0
             Wd = Val(PeekS(@CTable(char)+b,1))
             Box(x,y,BWidth * Wd, BLength,$000000)
             x = x + BWidth * Wd
           Else
             x = x + BWidth * Val(PeekS(@CTable(char)+b,1))
           EndIf
     Next
   StopDrawing()    
   GrabImage(BImage, BImage, 0, 0, x, BLength)
   BImage2 = CreateImage(#PB_Any,ImageWidth(BImage)+100,ImageHeight(BImage),BDepth)
   StartDrawing(ImageOutput(BImage2))
    Box(0,0,ImageWidth(BImage2),ImageHeight(BImage2),$FFFFFF)
    DrawImage(ImageID(BImage),50,0)
   StopDrawing()
   ProcedureReturn BImage2
EndProcedure

Procedure RotateImagePiHalfRad(Image)
  Protected ImgH = ImageHeight(Image)
  Protected ImgW = ImageWidth(Image)
  Protected RImage = CreateImage(#PB_Any, ImgH, ImgW)
  Protected Dim PixelBuffer(ImgH, ImgW)
  Protected x, y
  
  StartDrawing(ImageOutput(Image))
  For y = 1 To ImgH
    For x = 1 To ImgW
      PixelBuffer(y,x) = Point(x-1,y-1)
    Next
  Next
  StopDrawing()
  
  StartDrawing(ImageOutput(RImage))
  For y = 1 To ImgW
    For x = 1 To ImgH
      Plot(x-1,y-1,PixelBuffer(x,y))
    Next
  Next
  StopDrawing()
  
  ProcedureReturn RImage
EndProcedure

Input.s = InputRequester("Barcode Generator","Bitte Message zum Codieren eingeben!","")

Image = GenerateCodeMage(Input,#BWidth,#BLength,#BDepth)
ImageRot = RotateImagePiHalfRad(Image)
FreeImage(Image)

SaveImage(ImageRot,SaveFileRequester("Wo?","","*.png|*.png",0), #PB_ImagePlugin_PNG)
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Code 128 - Barcode generator

Beitrag von udg »

Gibt es zufällig die Möglichkeit statt einem png ein CAD fähiges Dxf zu speichern?
Jemand eine Idee?

Danke
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Code 128 - Barcode generator

Beitrag von man-in-black »

Hi,

statt ob, solltest du dich als Programmierer lieber fragen, wie schnell bekomme ich es hin? ;)

Hier hast du den Aufbau des dxf Formates. Ist sicherlich etwas fummelig, sich da einzulesen,
aber am Ende kannst dir selbst nen Konverter schreiben.
http://www.autodesk.com/techpubs/autoca ... /index.htm

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Code 128 - Barcode generator

Beitrag von udg »

Danke dir. Ich war mit dem Telefon unterwegs und hab noch nicht groß nachgedacht wie ich es anstellen kann. Aber eine Frage zu einem Tipp sei erlaubt ;)
Danke dir
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Code 128 - Barcode generator

Beitrag von DarkSoul »

Funktioniert nicht.

Ich habe "Test 12345678" in den InputRequester() eingegeben.

Bekommen habe ich einen dicken schwarzen Block... /:->

Getestet unter PB 5.50 x86 unter Win8.1
Bild
Antworten