Skip to content

Commit 945eeea

Browse files
committed
feat: Implement rMQR.fit
1 parent ca02e4d commit 945eeea

File tree

3 files changed

+30
-34
lines changed

3 files changed

+30
-34
lines changed

src/make_qr.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,13 @@
11
from enums.color import Color
2-
from enums.error_collection_level import ErrorCollectionLevel
3-
from rmqr.rmqr import rMQR
4-
from rmqr.rmqr import DataTooLongError
5-
from rmqr.data_capacities import data_capacities
2+
from rmqr import rMQR, ErrorCollectionLevel
63
from encoder.byte_encoder import ByteEncoder
74
from qr_image import QRImage
85

96

10-
def select_version(data, error_collection_level):
11-
data_length = ByteEncoder.length(data)
12-
ok_versions = []
13-
for qr_version, capacity in data_capacities.items():
14-
if data_length <= capacity['Byte'][error_collection_level]:
15-
ok_versions.append({
16-
'version': qr_version,
17-
'diff': capacity['Byte'][error_collection_level] - data_length
18-
})
19-
print(f"ok: {qr_version}")
20-
21-
if len(ok_versions) == 0:
22-
raise DataTooLongError("The data is too long.")
23-
24-
# とりあえず容量のあまりが最も少なくなるものを選ぶ
25-
# TODO: 選び方をパラメータで変えられるようにしたい
26-
selected = sorted(ok_versions, key=lambda x: x['diff'])[0]
27-
return selected['version']
28-
29-
30-
def make_qr(data, version, error_collection_level):
31-
qr = rMQR(version, error_collection_level)
32-
qr.make(data)
33-
return qr
34-
35-
367
def main():
37-
data = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. orem ipsum dolor sit amet, consectetur adipi"
8+
data = "ABCdef123漢字あいうえお"
389
error_collection_level = ErrorCollectionLevel.M
39-
version = select_version(data, error_collection_level)
40-
print(f"selected: {version}")
41-
qr = make_qr(data, version, error_collection_level)
10+
qr = rMQR.fit(data, error_collection_level)
4211
qr.dump()
4312

4413
image = QRImage(qr)

src/rmqr/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from rmqr.rmqr import rMQR
2+
from enums.error_collection_level import ErrorCollectionLevel

src/rmqr/rmqr.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from enums.alignment_pattern_coordinates import AlignmentPatternCoordinates
44
from enums.generator_polynomials import GeneratorPolynomials
55
from enums.error_collection_level import ErrorCollectionLevel
6+
from rmqr.data_capacities import data_capacities
67

78
from .qr_versions import qr_versions
89
from .mask import mask
@@ -12,6 +13,30 @@
1213

1314

1415
class rMQR:
16+
@staticmethod
17+
def fit(data, error_collection_level):
18+
data_length = ByteEncoder.length(data)
19+
ok_versions = []
20+
for qr_version, capacity in data_capacities.items():
21+
if data_length <= capacity['Byte'][error_collection_level]:
22+
ok_versions.append({
23+
'version': qr_version,
24+
'diff': capacity['Byte'][error_collection_level] - data_length
25+
})
26+
print(f"ok: {qr_version}")
27+
28+
if len(ok_versions) == 0:
29+
raise DataTooLongError("The data is too long.")
30+
31+
# とりあえず容量のあまりが最も少なくなるものを選ぶ
32+
# TODO: 選び方をパラメータで変えられるようにしたい
33+
selected = sorted(ok_versions, key=lambda x: x['diff'])[0]
34+
35+
qr = rMQR(selected['version'], error_collection_level)
36+
qr.make(data)
37+
return qr
38+
39+
1540
def __init__(self, version, error_collection_level):
1641
qr_version = qr_versions[version]
1742
self._height = qr_version['height']

0 commit comments

Comments
 (0)