想問一下BytesIO的作用為何
img = Image.open(BytesIO(response.content))
想問一下BytesIO的作用為何,沒了他就讀不出來了,原因何在?(可以解釋一下語法嗎?)
def img2arr_fromURLs(url_list, resize = False):
img_list = []
for url in url_list:
response = requests.get(url)
try:
img = Image.open(BytesIO(response.content))
if resize:
img = img.resize((256,256))
這邊resize=False是甚麼(可以解釋一下這個函式怎麼運作嗎?)
是如果今天False就不會跑 img = img.resize((256,256)) 這行了嗎?(因為False的關係)
result = img2arr_fromURLs(df[0:5][1].values)
想問一下加了values的作用(好像加不加都沒差?)
回答列表
-
2020/03/22 上午 00:44張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
嗨,柏勳
如果你的問題比較多的話,可以用條列的方法可能會比較好一點。
1. 這邊resize=False是甚麼(可以解釋一下這個函式怎麼運作嗎?)
是如果今天False就不會跑 img = img.resize((256,256)) 這行了嗎?(因為False的關係)
=> img2arr_fromURLs 是一個 function,參數有 url_list 和 resize(預設是 False)。作用是如果 resize 有設定等於 Ture,則會在讀完圖片值之後縮放成 256*256 (img.resize((256,256)) )。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/03/22 上午 00:46張維元 (WeiYuan)贊同數:1不贊同數:0留言數:2
2. result = img2arr_fromURLs(df[0:5][1].values)
想問一下加了values的作用(好像加不加都沒差?)
=> 這邊你可以先看一下 df[0:5][1].values 會用在哪裡,這個其實就是 Function 中的 url_list 參數,而他會用在 for url in url_list 這個位置。df[0:5][1] 是一個 Series,.values 是一個 Array,兩者都可以被 for loop 所認得,所以在這裡沒差。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/03/22 上午 01:33李子明贊同數:0不贊同數:0留言數:1
url_list的內容是網址的列表,每個網址都指向一張照片。
img2arr_fromURLs的功能是傳回一個列表,列表中的內容依序為url_list所描述的照片,而照片的大小視resize這個參數而決定,如果是True時,所有的照片都將有一樣的大小,即長寬皆為256。
當使用requests.get來從網址讀入照片時,我們得到的內容是response.content,這是一堆存在於記憶體中的數字,所以要用BytesIO來從記憶體中把這堆數字取出來丟到Image.open中處理,因為Imagel.open沒辦法直接從記憶體中取得資料。
你這個img2arr_fromURLs還不完整,接下來你需要做的是把img追加到img_list中,然後在for結束之後把img_list回傳回去。
當有使用values時,其實是把網址的內容轉換成為numpy.ndarray。當沒有使用values時,是把網址的內容直接輸出為pandas的Series。有沒有values都可以的原因,是因為傳給img2arr_fromURLs之後,對網址列表的使用方法是for迴圈,而for迴圈是可以處理numpy.ndarray或Series的。