Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.perl.modules > #203

Imager::QRCode-ing octet sequences vs. zbarimg(1)

From Ivan Shmakov <oneingray@gmail.com>
Newsgroups comp.lang.perl.modules, comp.lang.perl.misc, alt.barcodes
Subject Imager::QRCode-ing octet sequences vs. zbarimg(1)
Date 2013-03-13 11:40 +0000
Organization A noiseless patient Spider
Message-ID <87ehfjmst4.fsf@violet.siamics.net> (permalink)

Cross-posted to 3 groups.

Show all headers | View raw


	[AIUI, discussion of Perl modules is more appropriate for
	news:comp.lang.perl.modules.  Yet, it appears to be abandoned,
	thus cross-posting to news:comp.lang.perl.misc.  Cross-posting
	to news:alt.barcodes, too, just in case.]

	I wonder if QR codes are suitable for encoding arbitrary octet
	sequences (AKA 8-bit data)?  I've tried the following Perl code,
	but it appears that the resulting transformations aren't "8-bit
	clean."  Somehow, I suspect a QR::Imager fault, although
	zbarimg(1) may be responsible.  (Unfortunately, the Perl module
	itself doesn't provide a decoder.)

	Any idea what may be going on?

	TIA.

	(The leading 51522d436f64653a and the trailing 0a after
	"Decoded:" are "QR-Code:" and a newline, respectively.  In the
	first example, the first three octets in the output, 621d4f,
	appear to match the input.  Incidentally, the fourth octet has
	its most significant bit set.)

$ perl \
      89br96tnpoogun68sfh1jkj1sb.perl # "use bytes;" commented out
Blob:     621d4f87d3ae92b60932c96b7f81f3a916faff9b03ae54f97d8163987dc8733df1bd8f8b92fb5317657ee2a0a97eed1f12423cdbfa1a73b3166a39cb4b1c0f43
Image:    123 by 123
Decoded:  51522d436f64653a621d4fc287c393c2aec292c2b60932c3896b7fc281c3b3c2a916c3bac3bfc29b03c2ae54c3b97dc28163c2987dc388733dc3b1c2bdc28fc28bc292c3bb5317657ec3a2c2a0c2a97ec3ad1f12423cc39bc3ba1a73c2b3166a39c38b4b1c0f430a
scanned 1 barcode symbols from 1 images in 0.02 seconds

$ perl \
      89br96tnpoogun68sfh1jkj1sb.perl # "use bytes;" in place
Blob:     8abdab3e25ae4e44fbc50d9aedcadfb34b1eb959f78ca306bff1182f00024d1ca9e5d7db8827fdd4ab8169a18130cc3de3b31da82150bff080fe57d591f909cf
Image:    99 by 99
Decoded:  51522d436f64653ac28ac2bdc2ab3e25c2ae4e44c3bbc3850dc29ac3adc38ac39fc2b34b1ec2b959c3b7c28cc2a306c2bfc3b1182f0a
scanned 1 barcode symbols from 1 images in 0.02 seconds

$ LC_ALL=C perl \
      89br96tnpoogun68sfh1jkj1sb.perl # "use bytes;" in place
Blob:     aba7c3b1e7721a22660308e7a7a7f6cfdb48b18fb2143d823021ece0bb2dde2ed0fe2d4b06fb56c4167e867a1f0ef4f495a46a6efb2ce76621fb58b5bd817605
Image:    123 by 123
Decoded:  51522d436f64653ac2abc2a7c383c2b1c3a7721a22660308c3a7c2a7c2a7c3b6c38fc39b48c2b1c28fc2b2143dc2823021c3acc3a0c2bb2dc39e2ec390c3be2d4b06c3bb56c384167ec2867a1f0ec3b4c3b4c295c2a46a6ec3bb2cc3a76621c3bb58c2b5c2bdc28176050a
scanned 1 barcode symbols from 1 images in 0.03 seconds

$ cat < 89br96tnpoogun68sfh1jkj1sb.perl 
use bytes;
use common::sense;
use English;

require Imager::QRCode;
require IPC::Open2;

sub rand_blob (;$) {
    my ($len) = @_;
    $len
	//= 24;
    open (my $f, "<", "/dev/urandom")
	or die ($OS_ERROR);
    binmode ($f);
    my $s;
    die ($OS_ERROR)
	unless (read ($f, $s, $len) == $len);
    ## .
    $s;
}

my $blob
    = rand_blob (64);
print ("Blob:     ", unpack ("H*", $blob), "\n");

my $qr
    = Imager::QRCode->new (qw (mode 8-bit  casesensitive 1));
my $img
    = $qr->plot ($blob);
print ("Image:    ", $img->getwidth (),
       " by ", $img->getheight (), "\n");

my ($in, $out);
my $pid
    = IPC::Open2::open2 ($in, $out, qw (zbarimg -- -))
    or die ($OS_ERROR);
binmode ($in);
binmode ($out);

$img->write ("fh" => $out, "type" => "pnm")
    or die ($img->errstr ());
close ($out);
my $dec
    = <$in>;
print ("Decoded:  ", unpack ("H*", $dec), "\n");
$ 

-- 
FSF associate member #7257

Back to comp.lang.perl.modules | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Imager::QRCode-ing octet sequences vs. zbarimg(1) Ivan Shmakov <oneingray@gmail.com> - 2013-03-13 11:40 +0000
  Re: Imager::QRCode-ing octet sequences vs. zbarimg(1) Ben Morrow <ben@morrow.me.uk> - 2013-03-13 16:27 +0000
    bytes, English, and prototypes Ivan Shmakov <oneingray@gmail.com> - 2013-03-13 17:28 +0000
    Re: Imager::QRCode-ing octet sequences vs. zbarimg(1) Ivan Shmakov <oneingray@gmail.com> - 2013-03-14 20:25 +0000
    Re: Imager::QRCode-ing octet sequences vs. zbarimg(1) Ivan Shmakov <oneingray@gmail.com> - 2013-03-17 17:57 +0000
      Re: Imager::QRCode-ing octet sequences vs. zbarimg(1) Ben Morrow <ben@morrow.me.uk> - 2013-03-18 23:42 +0000
        [OT] reporting bugs Ivan Shmakov <oneingray@gmail.com> - 2013-03-30 11:02 +0000
          Re: reporting bugs Ben Morrow <ben@morrow.me.uk> - 2013-04-01 22:58 +0100
            Re: reporting bugs Ivan Shmakov <oneingray@gmail.com> - 2013-04-06 13:50 +0000
          configuring CPAN to apply patches (such as #29468, IPv6 in Net::HTTP) Ivan Shmakov <oneingray@gmail.com> - 2013-06-28 19:48 +0000

csiph-web