回答編集履歴

2

追記

2021/02/21 13:55

投稿

kairi003
kairi003

スコア1330

test CHANGED
@@ -1,8 +1,6 @@
1
- こういうことでしょうか?
2
-
3
1
  PhotoImageのdataはふつうにbytesでいいみたいですね.
4
2
 
5
- なんでわざわざImageにしているのかわからなかっのでopenで開ますが,もちろんImage.saveでBytesIOにしてgetvalue()してcontentsは得られ
3
+ 画像ファイルのバイナリをtkinter貼りたいうことしたらBytesIOもPILも要りせん
6
4
 
7
5
 
8
6
 
@@ -42,6 +40,10 @@
42
40
 
43
41
 
44
42
 
43
+ もちろんPILを経由することもできますが非効率です.
44
+
45
+
46
+
45
47
  ```py
46
48
 
47
49
  origin = Image.open("test.png")
@@ -53,3 +55,41 @@
53
55
  contents = output.getvalue()
54
56
 
55
57
  ```
58
+
59
+
60
+
61
+ また,PILで編集したImageをtkinterに貼りたい,ということでしたらImageTkでそのままPhotoImageにできます.
62
+
63
+
64
+
65
+ ```py
66
+
67
+ import tkinter as tk
68
+
69
+ from PIL import Image, ImageTk
70
+
71
+
72
+
73
+ win = tk.Tk()
74
+
75
+ win.resizable(False,False)
76
+
77
+ cvs = tk.Canvas(width=900, height=900)
78
+
79
+ cvs.pack()
80
+
81
+
82
+
83
+ origin = Image.open("test.png")
84
+
85
+ img = ImageTk.PhotoImage(origin)
86
+
87
+
88
+
89
+ cvs.create_image(450,450,image=img, tag="mytest")
90
+
91
+
92
+
93
+ win.mainloop()
94
+
95
+ ```

1

追記

2021/02/21 13:55

投稿

kairi003
kairi003

スコア1330

test CHANGED
@@ -1,6 +1,8 @@
1
1
  こういうことでしょうか?
2
2
 
3
3
  PhotoImageのdataはふつうにbytesでいいみたいですね.
4
+
5
+ なんでわざわざImageにしているのかわからなかったのでopenで開いていますが,もちろんImage.saveでBytesIOにしてgetvalue()してもcontentsは得られます.
4
6
 
5
7
 
6
8
 
@@ -20,9 +22,9 @@
20
22
 
21
23
 
22
24
 
23
- with open("test.png", 'rb') as output:
25
+ with open("test.png", 'rb') as f:
24
26
 
25
- contents = output.read()
27
+ contents = f.read()
26
28
 
27
29
 
28
30
 
@@ -37,3 +39,17 @@
37
39
  win.mainloop()
38
40
 
39
41
  ```
42
+
43
+
44
+
45
+ ```py
46
+
47
+ origin = Image.open("test.png")
48
+
49
+ with io.BytesIO() as output:
50
+
51
+ origin.save(output, format="PNG")
52
+
53
+ contents = output.getvalue()
54
+
55
+ ```