在第 18 天,我們將專注於處理 Line Bot 收到的圖片消息。Line Bot 除了能處理文字消息外,也能接收用戶上傳的圖片,並對圖片進行回應或處理,例如保存圖片、分析內容等。
Line Bot 在收到圖片後,可以通過 ImageMessage
事件處理器來接收圖片消息,並進行處理或存儲。當用戶發送圖片時,LINE 會給我們一個 message_id
,通過這個 message_id
可以下載圖片。
設置圖片消息的處理器:
ImageMessage
事件會觸發,你可以用此來處理該圖片。例子:
@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
message_id = event.message.id # 獲取圖片的 message_id
image_content = line_bot_api.get_message_content(message_id) # 下載圖片內容
# 保存圖片到本地
with open(f"{message_id}.jpg", "wb") as f:
for chunk in image_content.iter_content():
f.write(chunk)
reply_message = "圖片已收到並保存!"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
使用 Line SDK 下載圖片:
line_bot_api.get_message_content(message_id)
可以下載用戶發送的圖片。你可以將其保存到本地伺服器,或進行進一步處理,如使用圖像識別工具。處理大文件:
處理圖片後,你可以進一步使用圖像分析 API 來對圖片內容進行分析,如識別對象、顏色、文字等。
整合圖像識別 API:
例子(假設使用 Google Vision API 進行文字識別):
from google.cloud import vision
def analyze_image(image_path):
client = vision.ImageAnnotatorClient()
with open(image_path, "rb") as image_file:
content = image_file.read()
image = vision.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations
return texts[0].description if texts else "未能識別圖片中的文字"
@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
message_id = event.message.id
image_content = line_bot_api.get_message_content(message_id)
# 保存圖片
image_path = f"{message_id}.jpg"
with open(image_path, "wb") as f:
for chunk in image_content.iter_content():
f.write(chunk)
# 圖像識別
result = analyze_image(image_path)
reply_message = f"圖片中的文字是: {result}"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
Line Bot 也支持 GIF 等其他圖片格式的處理。處理 GIF 的邏輯和普通圖片類似,不過在處理過程中,可以進一步分析或處理每一幀畫面,或者直接回應 GIF 文件。