239
|
1
|
;;; dat/png.lisp --- PNG image format |
|
2
|
|
|
3
|
;; |
|
4
|
|
|
5
|
;;; Code: |
|
6
|
(in-package :dat/png) |
|
7
|
|
|
8
|
;;;; Copyright (c) 2011-2014 jnjcc, Yste.org. All rights reserved. |
|
9
|
;;;; |
|
10
|
;;;; png backend for QR code symbol |
|
11
|
|
|
12
|
;; (defun set-color (pngarray x y color) |
|
13
|
;; (setf (aref pngarray x y 0) color) |
|
14
|
;; (setf (aref pngarray x y 1) color) |
|
15
|
;; (setf (aref pngarray x y 2) color)) |
|
16
|
|
|
17
|
;; (defun symbol->png (symbol pixsize margin) |
|
18
|
;; "return the qr symbol written into a zpng:png object with PIXSIZE |
|
19
|
;; pixels for each module, and MARGIN pixels on all four sides" |
|
20
|
;; (with-slots (matrix modules) symbol |
|
21
|
;; (let* ((size (+ (* modules pixsize) (* margin 2))) |
|
22
|
;; (qrpng (make-instance 'zpng:png :width size :height size)) |
|
23
|
;; (qrarray (zpng:data-array qrpng))) |
|
24
|
;; (dotimes (x size) |
|
25
|
;; (dotimes (y size) |
|
26
|
;; (if (and (<= margin x (- size margin 1)) |
|
27
|
;; (<= margin y (- size margin 1))) |
|
28
|
;; (let ((i (floor (- x margin) pixsize)) |
|
29
|
;; (j (floor (- y margin) pixsize))) |
|
30
|
;; (if (dark-module-p matrix i j) |
|
31
|
;; (set-color qrarray x y 0) |
|
32
|
;; (set-color qrarray x y 255))) |
|
33
|
;; ;; quiet zone |
|
34
|
;; (set-color qrarray x y 255)))) |
|
35
|
;; qrpng))) |
|
36
|
|
|
37
|
;; (defun encode-png (text &key (fpath "qrcode.png") (version 1) (level :level-m) |
|
38
|
;; (mode nil) (pixsize 9) (margin 8)) |
|
39
|
;; (let ((symbol (encode-symbol text :version version :level level :mode mode))) |
|
40
|
;; (zpng:write-png (symbol->png symbol pixsize margin) fpath))) |
|
41
|
|
|
42
|
;; (defun encode-png-stream (text stream &key (version 1) (level :level-m) |
|
43
|
;; (mode nil) (pixsize 9) (margin 8)) |
|
44
|
;; (let ((symbol (encode-symbol text :version version :level level :mode mode))) |
|
45
|
;; (zpng:write-png-stream (symbol->png symbol pixsize margin) stream))) |
|
46
|
|
|
47
|
;; (defun encode-png-bytes (bytes &key (fpath "kanji.png") (version 1) |
|
48
|
;; (level :level-m) (mode nil) (pixsize 9) (margin 8)) |
|
49
|
;; (let ((symbol (encode-symbol-bytes bytes :version version :level level |
|
50
|
;; :mode mode))) |
|
51
|
;; (zpng:write-png (symbol->png symbol pixsize margin) fpath))) |
|
52
|
|
|
53
|
;; (defun encode-png-bytes-stream (bytes stream &key (version 1) (level :level-m) |
|
54
|
;; (mode nil) (pixsize 9) (margin 8)) |
|
55
|
;; (let ((symbol (encode-symbol-bytes bytes :version version :level level |
|
56
|
;; :mode mode))) |
|
57
|
;; (zpng:write-png-stream (symbol->png symbol pixsize margin) stream))) |