[BB] Barcode Genrator (Interleaved 2/5, EAN8, EAN16)

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Falling.down

Betreff: [BB] Barcode Genrator (Interleaved 2/5, EAN8, EAN16)

BeitragMo, Aug 03, 2009 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal... Very Happy

Gegeben:
Ich hatte ein Foto einer Karte (für die Mediothek) mit einem Strichcode drauf. Nun wollte ich diesen Strichcode erzeugen um dann eine "eigene" Karte zu drucken.
(natürlich ist die Karte von mir selber Razz )
Ich befasste mich kurz mit Barcodes und erkannte schnell dass es sich um einen Interleaved-2-aus-5-Code handelt
user posted image

Ergebniss:
user posted image

Ich bin stolz euch den Generator für Interleaved 2aus 5 Barcode sowie EAN-8 und EAN-16 zu presentieren Very Happy

Befehle:
Code: [AUSKLAPPEN]
EAN8Barcode(codeNumber$, [imgHeight=50], [shortBarHeight=45],[maskImg=0])
EAN16Barcode(codeNumber$, [imgHeight=50], [shortBarHeight=45],[maskImg=0])

Code: [AUSKLAPPEN]
codeNumber$:     Dezimalzahl als String (Länge muss kleiner als 13 bzw. 8 sein)
imgHeight:       Höhe des Barcodes
shortBarHeight:  Höhe der kleineren Balken des Codes
maskImg:         Ob das Bild mit Rot maskiert werden soll (ungeignet zum abspeichern)


Code: [AUSKLAPPEN]
Intleaved2of5BarCode(codeNumber$,ImgHeight, [thinBarWidth=1], [wideBarWidth=3])

Code: [AUSKLAPPEN]
thinBarWidth: Breite des dünnen Balkens
wideBarWidth: Breite des dicken Balkens


falls ihr Fehler/Bugs findet bitte melden..

Download V1.3

mfg
falling.down

Edit: Download neuste Version jetz direkt vom Forum
  • Zuletzt bearbeitet von Falling.down am Mi, Aug 05, 2009 0:58, insgesamt 3-mal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Aug 03, 2009 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Finde ich gut. Hab mich auch erst vor kurzem mit Strichkodierungen beschäftigt, allerdings hab ich nur einer der einfachsten Kodierung ''Code39'' als Font für die Draw3D erstellt. Code39 kann Zahlen, Buchstaben und einige Sonderzeichen kodieren wobei jedes Zeichen aus 5 Strichen bestehen (bis auf die Sonderzeichen: drei dünnen, zwei dicken) und eine einheitliche Breite haben. Dein Interleaved-2-aus-5-Code dagegen kodiert ja richtig und kann nicht einfach pro Zeichen aus einer Datenbank ausgelesen werden. Ohne genauer hinzusehen hätte ich hier aber an CodeEAN gedacht.

Auf jeden Fall drucke ich mir mal ein paar Code aus und teste diese bei der Arbeit auf Richtigkeit.

Edit1: ok, ich hab jetzt den Strichcode 2/5 bei Wikipedia gefunden. Beachte, dass 2/5 nur richtig funktionieren kann, wenn eine gerade Anzahl Ziffern geschrieben wird. Du umgehst das Problem aber dadurch, dass du einfach eine ''0'' hinten anhängst, was die gespeicherte Zahl ja verfälscht. Besser fände ich wenn eine Fehlermeldung erscheinen würde.

Eingeproggt

BeitragMo, Aug 03, 2009 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wer keine Lust hat sich von SlowShare was zu laden was es in 30 Tagen eh nicht mehr geben wird, dem sei hier geholfen:

Include:
BlitzBasic: [AUSKLAPPEN]
Dim CodeMatrix$(11)
InitCodeMatrix()

Function InitCodeMatrix()
CodeMatrix(0)="00110"
CodeMatrix(1)="10001"
CodeMatrix(2)="01001"
CodeMatrix(3)="11000"
CodeMatrix(4)="00101"
CodeMatrix(5)="10100"
CodeMatrix(6)="01100"
CodeMatrix(7)="00011"
CodeMatrix(8)="10010"
CodeMatrix(9)="01010"
CodeMatrix(10)="0000" ; Start
CodeMatrix(11)="100" ; End
End Function

Function GetIntleavedCodeImg(code$,ImgHeight,thinBarWidth=1,wideBarWidth=3)
Local CodeString$
Local z=1,i
Local numOben
Local numUnten
Repeat
numOben=Int(Mid(code,z,1))
numUnten=Int(Mid(code,z+1,1))
CodeString=CodeString+ZipString(CodeMatrix(numOben),CodeMatrix(numUnten))
z=z+2
If Mid(code,z,1)="" Then Exit
Forever
CodeString=CodeMatrix(10)+CodeString+CodeMatrix(11)
Local image=CreateImage(GetCodeImageWidth(CodeString,thinBarWidth,wideBarWidth),ImgHeight)
SetBuffer ImageBuffer(image)
Local xPos=0
Local strPos=1
Local black=1
Local width
Repeat
Select Int(Mid(CodeString,strPos,1))
Case 0
width=thinBarWidth
Case 1
width=wideBarWidth
End Select
DebugLog width
If black=1 Then
Color 0,0,0
Else
Color 255,255,255
EndIf
Rect xPos,0,width,ImageHeight(image)
strPos=strPos+1
xPos=xPos+width
If strPos>Len(CodeString) Then Exit
black=black*-1
Forever
SetBuffer BackBuffer()
Return image
End Function
Function ZipString$(firstString$,secondString$)
If Len(firstString)<>Len(secondString) Then Return
Local z,zippedString$
For z=1 To Len(firstString)
zippedString=zippedString+Mid(firstString,z,1)+Mid(secondString,z,1)
Next
Return zippedString
End Function

Function GetCodeImageWidth(BinCode$,thinBarWidth,wideBarWidth)
Local z,width
For z=1 To Len(BinCode)
Select Int(Mid(BinCode,z,1))
Case 0
width=width+thinBarWidth
Case 1
width=width+wideBarWidth
End Select
Next
Return width
End Function


Beispiel:
BlitzBasic: [AUSKLAPPEN]
Include "BarCode.bb"
Local image=GetIntleavedCodeImg("00026130",50,1,3)
SaveImage(image,"code.bmp")


mfG, Christoph.

EDIT: Beispiel berichtigt Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
  • Zuletzt bearbeitet von Eingeproggt am Di, Aug 04, 2009 17:50, insgesamt einmal bearbeitet

Falling.down

BeitragDi, Aug 04, 2009 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@ hectic:

Das mit den geraden Anzahl Ziffern ist mir auch aufgefallen, aber ich vergass etwas einzubauen.
ich habe jetzt noch ein BlitzBasic: [AUSKLAPPEN]
If Not Len(code)/2.=Floor(Len(code)/2) Then code="0"+code

eingebaut:

Include V 1.1:

BlitzBasic: [AUSKLAPPEN]

Dim CodeMatrix$(11)
InitCodeMatrix()

Function InitCodeMatrix()
CodeMatrix(0)="00110"
CodeMatrix(1)="10001"
CodeMatrix(2)="01001"
CodeMatrix(3)="11000"
CodeMatrix(4)="00101"
CodeMatrix(5)="10100"
CodeMatrix(6)="01100"
CodeMatrix(7)="00011"
CodeMatrix(8)="10010"
CodeMatrix(9)="01010"
CodeMatrix(10)="0000" ; Start Intleaved
CodeMatrix(11)="100" ; End Intleaved

End Function


Function GetIntleavedCodeImg(code$,ImgHeight,thinBarWidth=1,wideBarWidth=3)
If Not Len(code)/2.=Floor(Len(code)/2) Then code="0"+code
Local CodeString$
Local z=1,i
Local numOben
Local numUnten
Repeat
numOben=Int(Mid(code,z,1))
numUnten=Int(Mid(code,z+1,1))
CodeString=CodeString+ZipString(CodeMatrix(numOben),CodeMatrix(numUnten))
z=z+2
If Mid(code,z,1)="" Then Exit
Forever
CodeString=CodeMatrix(10)+CodeString+CodeMatrix(11)
Local image=CreateImage(GetCodeImageWidth(CodeString,thinBarWidth,wideBarWidth),ImgHeight)
SetBuffer ImageBuffer(image)
Local xPos=0
Local strPos=1
Local black=1
Local width
Repeat
Select Int(Mid(CodeString,strPos,1))
Case 0
width=thinBarWidth
Case 1
width=wideBarWidth
End Select
DebugLog width
If black=1 Then
Color 0,0,0
Else
Color 255,255,255
EndIf
Rect xPos,0,width,ImageHeight(image)
strPos=strPos+1
xPos=xPos+width
If strPos>Len(CodeString) Then Exit
black=black*-1
Forever
SetBuffer BackBuffer()
Return image
End Function
Function ZipString$(firstString$,secondString$)
If Len(firstString)<>Len(secondString) Then Return
Local z,zippedString$
For z=1 To Len(firstString)
zippedString=zippedString+Mid(firstString,z,1)+Mid(secondString,z,1)
Next
Return zippedString
End Function

Function GetCodeImageWidth(BinCode$,thinBarWidth,wideBarWidth)
Local z,width
For z=1 To Len(BinCode)
Select Int(Mid(BinCode,z,1))
Case 0
width=width+thinBarWidth
Case 1
width=width+wideBarWidth
End Select
Next
Return width
End Function


Ich bin jetz an einem generator für EAN.. Smile

@ Eingeproggt: Danke Schön! Very Happy

Edit: Falsches Komma entfernt, Lower mit Floor ausgewechselt Laughing

! Edit: Fehler In Beispiel! Shocked (ich verwechselete den dicken Balken mit dem dünnen Embarassed )

Falling.down

Betreff: EAN8 Generator

BeitragDi, Aug 04, 2009 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: man sollte nie etwas posten bevor es fertig ist
  • Zuletzt bearbeitet von Falling.down am Di, Aug 04, 2009 18:46, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Aug 04, 2009 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab heute in der Firma das erste Strichcode-Programm in der Firma versucht mit einem Scanner auszulesen. Und wie ich feststellen musste, ging es nicht. Der Scanner konnte meinen Code3D (selbst gedruckt auf Fotopapier und höhste Druckqualität) lesen, aber die deine nicht. Auch das Bildbeispiel aus diesem Wikipediaeintrag zeigt ein anderes Bild mit der Zahlenfolge ''74380707240152655700'' als dein Programm es zeichnet.

Mir ist allerdings eben aufgefallen, dass der Vergleich zwischen deinem Programm und dem aus Wikipedia folgende Änderungen beinhaltet:

Wikipedia Beispielcode beginnt mit (nur Striche berücksichtigt):
5 dünne, 4 dicke, 5 dünne, 2 dicke, 3 dünne, 2 dicke, 2 dünne ...

Dein Programm mit der selben Zahl (nur Striche berücksichtigt):
5 dicke, 4 dünne, 5 dicke, 2 dünne, 3 dicke, 2 dünne, 2 dünne ...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Falling.down

BeitragDi, Aug 04, 2009 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Ich hab heute in der Firma das erste Strichcode-Programm in der Firma versucht mit einem Scanner auszulesen. Und wie ich feststellen musste, ging es nicht. Der Scanner konnte meinen Code3D (selbst gedruckt auf Fotopapier und höhste Druckqualität) lesen, aber die deine nicht. Auch das Bildbeispiel aus diesem Wikipediaeintrag zeigt ein anderes Bild mit der Zahlenfolge ''74380707240152655700'' als dein Programm es zeichnet.

Mir ist allerdings eben aufgefallen, dass der Vergleich zwischen deinem Programm und dem aus Wikipedia folgende Änderungen beinhaltet:

Wikipedia Beispielcode beginnt mit (nur Striche berücksichtigt):
5 dünne, 4 dicke, 5 dünne, 2 dicke, 3 dünne, 2 dicke, 2 dünne ...

Dein Programm mit der selben Zahl (nur Striche berücksichtigt):
5 dicke, 4 dünne, 5 dicke, 2 dünne, 3 dicke, 2 dünne, 2 dünne ...


Exclamation Das ist eben der Fehler im Beispiel du kannst einfach die Breitenangaben weglassen dann kommts richtig raus... Embarassed

Lade doch einfach die neue Version runter und dann stehst auch im Beispiel richtig... Rolling Eyes

Weil stimmen tuts denn:

BlitzBasic: [AUSKLAPPEN]
Include "BarCode.bb"
code="74380707240152655700"
Local image=GetIntleavedCodeImg(code$,50,2,4)
SaveImage(image,"code.bmp")
FreeImage image

liefert genau da: wiki code Beispiel

mfg
Falling.down

PS: EAN-13 kommt jetz dann gleich Very Happy

Falling.down

Betreff: EAN 13

BeitragMi, Aug 05, 2009 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetz ists offiziell: der EAN 13 Generator ist auch draussen.. Razz
ich habe denn Generator mit dem Beispiel von Wikipedia gestested und er sollte funktionieren..
was zu beachten ist, ist dass das 13 Zeichen als erstes eingegeben werden soll im String (bei den allermeisten Fällen ist das eh der Fall also habe ich es so gemacht..)
(download oben)

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group