Wenn Sie einen QR-Code generieren und mit API usw. zurücksenden oder eine E-Mail senden Der Vorgang des einmaligen Speicherns und Lesens in einer Datei ist enthalten. Bei dieser Verarbeitung treten Probleme mit der Geschwindigkeit der E / A und Probleme bei der Parallelverarbeitung auf.
Mit dem BytesIO-Modul können Sie ein Bild im Speicher generieren, ohne es einmal in eine Datei ausspucken zu müssen.
Benötigt qrcode und Pillow Bibliotheken.
pip install qrcode pillow
from io import BytesIO
import base64
import qrcode
class QRImage():
@staticmethod
def to_bytes(text: str) -> bytes:
stream = BytesIO()
img = qrcode.make(text)
img.save(fp, "PNG")
stream.seek(0)
byte_img = stream.read()
stream.close()
return byte_img
@classmethod
def to_b64(cls, text: str) -> bytes:
byte = cls.to_bytes(text)
return base64.b64encode(byte).decode("utf-8")
if __name__ == "__main__":
binary = QRImage.to_bytes(text="some_text")
base64_encoded = QRImage.to_b64(text="some_text")
Generieren Sie einfach einen Binär-Stream mit BytesIO ()
und erstellen, lesen und speichern Sie ihn wie einen Dateistream.
StringIO usw. existieren ebenfalls und können Strings speichern. Es unterstützt auch die with-Syntax.
from io import StringIO
def main():
with StringIO() as fp:
fp.write("Hello")
print(fp.closed) # True
print(fp.getvalue()) # Hello
print(fp.closed) # False
main()
Verabschieden wir uns von Zwischendateien.
Recommended Posts