You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将调整尺寸后的图片转二进制并存入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:08