QR-Code Creator

  • Hi,
    im EN-Forum habe ich einen schönen Beitrag zum Erstellen von QR-Code gefunden.
    Das Bsp. war mir nur viel zu aufgebläht und nicht zur direkten Texteingabe vorgesehen.
    Somit habe ich eine GUI dafür erstellt mit folgenden Optionen:


    - Auswahl: Kopiere in Zwischenablage
    - Auswahl: Speichere Code als BMP und/oder PNG (oder gar nicht)
    - Auswahl: Dateiname, Präfix ist immer "QR_", Vorgabe: "JJJJMMTT_hhmmss"
    - Auswahl: Speicherordner, Vorgabe: Skriptordner
    - Texteingabe im Edit, verbleibende Zeichenzahl wird angezeigt (max. 3049 Zeichen; normalerweise erlaubt QR bis 4296 Zeichen, die verwendete Dll hat hier jedoch limitiert - vermutlich Qualitätslevel)
    - bei Restzeichenzahl unter 11 wird das Zählereld gelb hinterlegt, beim Überschreiten der zulässigen Anzahl erfolgt Rotfärbung
    - Bei Erstellen des QR-Codes wird die GUI auf die jeweils erforderliche Größe angepasst


    So schauts aus:
    autoit.de/wcf/attachment/16727/


    Die notwendige Dll habe ich als Binärstring gleich in die au3 mit eingebaut. Sie wird temporär erstellt im Skriptordner und beim Beenden wieder gelöscht.
    Hier im Thread-Code habe ich den Binärstring gekürzt.


    Edit 21.12.2012:
    Ich glaube der Fehler ist gefunden: #AutoIt3Wrapper_UseX64=N ist erforderlich. Gleich noch einen kleinen Fehler gefixed: Es wurde immer im @ScriptDir gespeichert (hatte vergessen die Variable dafür zu setzen ;)).



    DL bisher: 63

  • genialo...thx dafür..


    kleines Manko, wenn ich ca. 2000 Zeichen reinpacke, verkleinert sich die Gui und kein QR ist zu sehen..


    p.s. gibt es so was auhc für 128er-BarCode??

  • Super gemacht :thumbsup: . Ich guck mir mal später den Algo dahinter an, denn ich wollte das früher auch mal machen, bin aber kläglich gescheitert wegen fehlender Doku :D.
    Wie auch immer, es wäre noch nett, wenn man einstellen könnte ob es purer Text oder auch ein Link ist :).

  • kleines Manko, wenn ich ca. 2000 Zeichen reinpacke, verkleinert sich die Gui und kein QR ist zu sehen..

    Kann ich leider nicht nachvollziehen. Ich kann exakt 3049 Zeichen codieren, der von dir geschilderte Effekt tritt bei mir erst ab Zeichen 3050 auf.
    Verwende mal stückweise kürzere Strings, um festzustellen bei welcher Schwelle es bei dir kippt.
    Wie gesagt: bei mir auf Win 7, 64Bit sind 3049 zeichen möglich.


    p.s. gibt es so was auhc für 128er-BarCode??

    Wenn du eine Dll findest, die das umsetzt und auch eine Beschreibung für die Dll hast, kann man das realisieren.


    oder auch ein Link ist

    Warum? Link wird doch von Redern automatisch erkannt und formatiert.
    Ähm, einen Algo kannst du dier hier nicht ansehen, aber in dem Link auf die EN-Forum-Seite findest du auch einen Verweis auf die Dll-Source. Da kannst du dir den Algo ansehen.

  • Hi BugFix,


    echt cooles Teil, habs direkt mal angeworfen und bekomme leider immer den Fehler:


    C:\Users\x0r\Desktop\QR_Creator.au3 (321) : ==> Subscript used with non-Array variable.:
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($return[0])
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($return^ ERROR


    Ganz gleich, ob ich jetzt die *.dll neu generieren lasse oder einfach ne Kopie anlege.


    €dit: füge ich statt $return[0] einfach $return ein, dann funktionierts. Strange?!
    €dit2:


    alt:
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($return[0])
    neu:
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($return)


    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.


  • Mit ein paar Schriften und dieser UDF klappt das einfach (für Bilder das ganze per GDI+ zeichnen und speichern)
    http://www.autoitscript.com/forum/topic/141103-barcode-udf/


    Edit: Die Schriften kannst du auch ohne installation verwenden: _WinAPI_AddFontResourceEx für GDI und GUI (WinApiEx.au3)
    und für GDIPlus: _GDIPlus_PrivateCollectionAddFontFile, _GDIPlus_PrivateCollectionAddMemoryFont, _GDIPlus_PrivateCollectionCreate, _GDIPlus_PrivateFontCollectionDispose (GDIP.au3)

  • €dit: füge ich statt $return[0] einfach $return ein, dann funktionierts. Strange?!


    Hmm, also ich hatte vergessen in diesem Aufruf:
    $return = DllCall("quricol32.dll", "HANDLE", "GetHBitmap", "str", $_sText, "int", 4, "int", 2)den Dateinamen mit der Pfadvariablen ($sDllQR) zu ersetzen. Allerdings dürfte das zu keinem Problem führen, da dann der Aufruf ebenfalls im @ScriptDir stattfindet.
    Mir ist absolut schleierhaft, dass
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($return)funktionieren soll. Wenn $return[0] mit Arrayfehler abbricht bedeutet das, dass der Dll-Aufruf nicht erfolgreich war und demzufolge kannst du an _GDIPlus_BitmapCreateFromHBITMAPkein Handle übergeben ($return hat nur den Wert 0). Somit muss diese Funktion fehlschlagen. :wacko:

  • Habs grad nochmal mit unterschiedlichen Eingaben probiert, er generiert tatsächlich auch unterschiedliche Bilder. Also geh ich mal davon aus, dass das Teil so funktioniert ($return statt $return[0]).


    Warum auch immer...


    und nochmal €dit:
    $return = DllCall(@ScriptDir & "\quricol32.dll", "HANDLE", "GetHBitmap", "str", $_sText, "int", 4, "int", 2)


    statt:
    $return = DllCall("quricol32.dll", "HANDLE", "GetHBitmap", "str", $_sText, "int", 4, "int", 2)


    funktioniert jetz auch mit $return[0]


    Kanns mir aber nicht erklären, da die *.dll wirklich mit im Scriptordner angelegt wird - man sieht die ja auch!


    Vielleicht könnts daran liegen, dass AutoIt von mir seit einiger Zeit zwingend verlangt, dass ich Variablen deklariere, oder ist das seit irgendeinem Update?


    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r ()

  • Echt nice!
    Was noch ne coole Erweiterung wäre:
    Wenn man für die schwarzen "Blöcke" kleine Grafiken nehmen könnte oder z.B. noch weiße Punkte (wirkt cool) in die Blöcke setzen könnte ;)...
    Und/oder einfach alles direkt einfärben :)


    LG
    Aca

  • Wenn man für die schwarzen "Blöcke" kleine Grafiken nehmen könnte oder z.B. noch weiße Punkte (wirkt cool) in die Blöcke setzen könnte ;)...
    Und/oder einfach alles direkt einfärben :)


    Ob es cool wäre ist vom Betrachter abhängig - auf jeden Fall wäre es ziemlich bescheuert, da dann der Code nicht mehr (sicher) gelesen werden kann. :D Alle Barcodetypen basieren auf dem maximalen Kontrast zwischen Codeelement und Umgebung. Daher auch immer ein weißes Label mit schwarzem Code. ;-)

  • Hey,... Ich glaube dein QR Code Creator kodiert das Falsch ^^


    Laut Wikipedia gibt die Zeichenkette "QR Code" folgendes aus:[Blockierte Grafik: http://1.2.3.11/bmi/upload.wik…a/commons/8/87/QRCode.png]


    Allerdings gibt dein Skript folgendes aus:[Blockierte Grafik: http://www7.pic-upload.de/13.04.13/gihfipepi5py.png]


    Ich wollte jetzt nicht den Sinn deines Skriptes zerstören, aber ich finde du solltest das mal nachprüfen ob das wirklich so richtig ist oder ob es falsch auf Wikipedia steht! ^^
    (Quelle: http://de.wikipedia.org/wiki/QR-Code)


    LG. Make :D