3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PIL.Image.Imageをdiscord.Fileに変換したい

Last updated at Posted at 2022-08-10

こんにちはbeatbox4108です。
今回は少しPythonを書いていて躓いた点を覚書程度にまとめましたので見てみてください

TL;DR

io.BytesIOを使おう。

seek(0)するのを忘れずにしよう。

本文

Pythonで、Discordのスラッシュコマンドに反応して画像を送るbotを作っていた時のこと...

あれ?ファイルに出力しないと送信できなくね?

この時の環境、クラウド上で容量が結構少なかったのでどうしてもファイルに出力するのは避けたかったんです。
でもファイルオブジェクトかパスじゃないと送信できないし...

と、気づいたんです。そうかBytesIO介せばいいのか!
ということで書いたこちらのコード、ダメな点が一つありました。

# im は PIL.Image.Image
fileio=BytesIO()
image.save(fileio,format="png")
await interaction.followup.send(file=discord.File(fileio,"file.png"))

あれ?
Discord側ではちゃんとファイルは送信されたものの、肝心の中身がありませんでした。


原因は簡単。ある1行が抜けていました。

  fileio=BytesIO()
  image.save(fileio,format="png")
+ fileio.seek(0)
  await interaction.followup.send(file=discord.File(fileio,"file.png"))

これはIOの最初に戻るコマンド。
さっきのままだとどれだけ読み込んでもファイルの末端なので0バイトが出力されるだけでした。

筆者はこれに半日費やしました...


ってことでみんなは気を付けてくださいね...

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?