logo
Loading...

想問一下BytesIO的作用為何 - Cupoy

img = Image.open(BytesIO(response.content))想問一下Byt...

想問一下BytesIO的作用為何

2020/03/21 下午 11:56
機器學習共學討論版
江柏勳
觀看數:31
回答數:3
收藏數:0

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的。