DaDaDaTheoryNow commited on
Commit
635865c
1 Parent(s): 3f5c763

recreate animate qr code logic

Browse files
src/qr_generate/router.py CHANGED
@@ -1,12 +1,8 @@
1
  import base64
2
  import io
3
- import os
4
  from fastapi import APIRouter
5
  from qr_generate.schemas import QRCode, StaticQRCodeRequestModel, StaticQRCodeResponseModel, AnimatedQRCodeRequestModel, AnimatedQRCodeResponseModel
6
- from qrcode_artistic import write_artistic
7
- import random
8
- import string
9
-
10
  import segno
11
 
12
  router = APIRouter(
@@ -34,31 +30,22 @@ def generate_static_qr_code(qr_request: StaticQRCodeRequestModel):
34
  return StaticQRCodeResponseModel(status="success", data=QRCode(image_base64=base64_encoded_image,
35
  content=qr_request.content))
36
 
37
- def generate_random_digit_string(length):
38
- return ''.join(random.choice(string.digits) for _ in range(length))
39
-
40
  @router.post("/animated", response_model=AnimatedQRCodeResponseModel)
41
  def generate_animated_qr_code(qr_request: AnimatedQRCodeRequestModel):
42
- try:
43
  image_buffer = io.BytesIO()
44
- unique_picutre_name = generate_random_digit_string(30)
45
-
46
- video_path = unique_picutre_name + ".gif"
47
- print(video_path)
48
- with open(video_path, "wb") as fh:
49
- fh.write(base64.b64decode(qr_request.gif_base64))
50
-
51
- # Создание QR-кода на основе видео
52
- qrcode = segno.make(qr_request.content, error="h")
53
- write_artistic(qrcode, background=video_path, scale=qr_request.scale, target=image_buffer, kind="gif")
54
-
55
- # Перевод изображения в Base64
56
  image_buffer.seek(0)
57
  base64_encoded_image = base64.b64encode(image_buffer.read())
58
 
59
  return AnimatedQRCodeResponseModel(status="success", data=QRCode(image_base64=base64_encoded_image,
60
- content=qr_request.content))
61
- finally:
62
- # Удаление временного файла
63
- if os.path.exists(video_path):
64
- os.remove(video_path)
 
1
  import base64
2
  import io
 
3
  from fastapi import APIRouter
4
  from qr_generate.schemas import QRCode, StaticQRCodeRequestModel, StaticQRCodeResponseModel, AnimatedQRCodeRequestModel, AnimatedQRCodeResponseModel
5
+ from urllib.request import urlopen
 
 
 
6
  import segno
7
 
8
  router = APIRouter(
 
30
  return StaticQRCodeResponseModel(status="success", data=QRCode(image_base64=base64_encoded_image,
31
  content=qr_request.content))
32
 
 
 
 
33
  @router.post("/animated", response_model=AnimatedQRCodeResponseModel)
34
  def generate_animated_qr_code(qr_request: AnimatedQRCodeRequestModel):
 
35
  image_buffer = io.BytesIO()
36
+
37
+ qrcode = segno.make_qr(qr_request.content)
38
+ video_url = urlopen(qr_request.gif_link)
39
+
40
+ qrcode.to_artistic(
41
+ background=video_url,
42
+ target=image_buffer,
43
+ scale=qr_request.scale,
44
+ kind='gif'
45
+ )
46
+
 
47
  image_buffer.seek(0)
48
  base64_encoded_image = base64.b64encode(image_buffer.read())
49
 
50
  return AnimatedQRCodeResponseModel(status="success", data=QRCode(image_base64=base64_encoded_image,
51
+ content=qr_request.content))
 
 
 
 
src/qr_generate/schemas.py CHANGED
@@ -24,7 +24,7 @@ class StaticQRCodeResponseModel(BaseModel):
24
  class AnimatedQRCodeRequestModel(BaseModel):
25
  content: str
26
  scale: int = 15
27
- gif_base64: str
28
 
29
  class AnimatedQRCodeResponseModel(BaseModel):
30
  status: str
 
24
  class AnimatedQRCodeRequestModel(BaseModel):
25
  content: str
26
  scale: int = 15
27
+ gif_link: str
28
 
29
  class AnimatedQRCodeResponseModel(BaseModel):
30
  status: str