如何将调整尺寸后的图片转二进制并存入MySQL Blob?
解决调整尺寸后的图片存入MySQL Blob的问题
你当前代码的问题在于:self.binaryfile读取的是原图片文件的二进制数据,而调整尺寸后的图片仅用于界面显示,没有转换成二进制数据存入变量,导致数据库保存的是原图。
修改方案
通过io.BytesIO将调整后的内存图片对象转换成二进制数据,替代原读取原文件的逻辑:
步骤1:导入必要模块
先添加io模块(如果需要动态识别图片格式,还要导入os):
import io import os # 可选,用于动态获取图片格式
步骤2:修改get_image函数
def get_image(self, event): filetypes = (('image files', '*.png'), ('All files', '*.*')) filepath = fd.askopenfilename(filetypes=filetypes) if len(filepath) == 0: messagebox.showerror('showerror', 'You did not select file.') return else: img = Image.open(filepath) img = img.resize((180, 180)) self.defualt_image = ImageTk.PhotoImage(img) self.pic_label.config(image=self.defualt_image) # 生成调整后图片的二进制数据 img_byte_arr = io.BytesIO() # 动态获取原图片格式(可选,适配多种图片类型) img_format = os.path.splitext(filepath)[1].lower().lstrip('.') if img_format == 'jpg': img_format = 'JPEG' # 将调整后的图片写入字节流 img.save(img_byte_arr, format=img_format) # 读取字节流中的二进制数据 self.binaryfile = img_byte_arr.getvalue() img_byte_arr.close()
关键说明
io.BytesIO()创建内存字节流,模拟文件操作,避免生成临时文件img.save(img_byte_arr, format=img_format)将调整后的图片写入字节流,格式需与原图片一致(或指定你需要的格式,比如固定用PNG)img_byte_arr.getvalue()获取字节流中的二进制数据,这就是要存入Blob字段的内容
内容的提问来源于stack exchange,提问作者Hamid Shah
相关产品推荐
相关产品推荐

