Closed kousakirai closed 1 year ago
https://github.com/lincolnloop/python-qrcode こっちのライブラリは最近も更新されてるみたいだからこっちに乗り換えたほうが良いのではと個人的に思ってる
と言うか乗り換え作業しますわ。ついでにqrの実装部分も更新する
あー なるほど ありがとう
途中経過報告:python-qrcodeで出力されたPILImageをbytesに変換すると何故か中身が消える。原因知ってるやついたら教えてクレメンス
import io を追加して
qrbyte = io.BytesIO()
pilimage.save(qrbyte, format='PNG')
qrbyte = qrbyte.getvalue()
みたいにすればできるかもです
すでに試してたんだけど駄目だったんだよなぁ... なんかsave関数を通すと駄目っぽい
save関数通さずに直接send
に画像データ渡せば?
多分無理だと思われるぞ。discord.File関数通してやろうとしてみたけどPILImageからbytesへの変換が必須だった。
色々ソースコード見てきた。PILImageってクラス、独自実装だったのね...
import io, qrcode
qr = qrcode.make("...")
qrbyte = io.BytesIO()
qr._img.save(qrbyte, format='PNG') # _img属性にpil.Image.Imageクラスが入ってる
独自実装ちゃうで。PILの中にあるやつやで
e
Or in Python, use the make shortcut function:
import qrcode
img = qrcode.make('Some data here')
type(img) # qrcode.image.pil.PilImage
img.save("some_file.png")
すまん違うわ独自実装だ
でも見る限り独自実装のsave
関数でも問題はなさそうなんだよな...
何故かsaveすると中身が消滅する。俺の環境だけかもしれんから一回yaakiyuの手元の環境で試せそうなら試してみてほしい
メモリ上に書き出せる?BytesIOで。
自分できたよ。
じゃあおま環かぁ...
いや、まだわからん。どういうコードか見てないから。
ってかたまにtasurenがひょこっと出てくるの面白い
@qr.command(description="QRコードをテキストから生成します")
async def make(self, ctx: commands.Context, text: str):
stream = BytesIO()
img = qrcode.make(text)
img.save(stream, "PNG")
stream.seek(0)
byte_img = stream.getvalue()
print(type(byte_img))
stream.close()
file = discord.File(fp=byte_img)
await ctx.reply(file=file)
ワイのローカルで動かしてるやつ
本当に空になるの?
discord.File
に渡すのにgetvalue
をする必要なくね?
bytes
に変換しちゃうと相対パスとして認識されるはず。
本当に空になるの?
b''
が返ってくるから空なのはホント
discord.File
に渡すのにgetvalue
をする必要なくね?bytes
に変換しちゃうと相対パスとして認識されるはず。
そういやそうじゃん
print(byte_img)
ってやれば何かしら表示されるはず。
それで返ってきたのがb''
うぇ 自分のTermuxでやったらできたんだけどね。
俺もコンソール上でやる分には普通に行けるんよ。でもPythonでいざ動かそうとしたらダメになる subprocess通してやるかなぁ...
画像生成自体はうまく行ってるけどそれをいざBytesIOに渡そうとすると事故るな。
仮説やけどさぁ...これBytesIOを使ってるから駄目とかそういうオチ?
seek忘れじゃねぇかこんちくしょう
修正済み。
pipfile.lockでビルド時に失敗するっぽい。多分こいつが古いせいで3.10.8で使えない説がある