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

如何在PIL.image.crop()裁剪的图像中提取主色调(无需保存文件)

无需保存裁剪图像即可提取主色调的方法

你可以利用BytesIO将裁剪后的PIL图像转为内存中的字节流,直接传给ColorThief,完全不用把文件保存到本地。ColorThief的构造函数不仅支持文件路径,还能接受类文件对象(只要实现了read()方法就行),BytesIO正好符合这个要求。

修改后的代码如下:

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 14 11:39:07 2022

@author: nickr
"""
from PIL import Image
from colorthief import ColorThief
import io

im = Image.open("C:/Users/nickr/Desktop/right.png")

im1 = im.crop((0, 0, 50, 50)) # 裁剪左上角50x50的区域
im1.show()

# 将裁剪后的图像转为内存字节流
img_byte_arr = io.BytesIO()
im1.save(img_byte_arr, format='PNG') # 格式可根据原图像调整,比如JPG
img_byte_arr.seek(0) # 将指针移到流的开头

# 直接用字节流初始化ColorThief
color_thief = ColorThief(img_byte_arr)
im1Color = color_thief.get_color(quality=1)
print(im1Color)

关键步骤说明

  • 导入io模块创建BytesIO对象,它相当于内存中的临时文件
  • 调用im1.save()把裁剪后的图像写入字节流,注意指定和原图像匹配的格式
  • 调用seek(0)重置字节流的读取指针,否则ColorThief会从流的末尾开始读取,无法获取有效数据
  • 用字节流对象代替文件路径传入ColorThief,后续的色调提取逻辑和原有代码完全一致

内容的提问来源于stack exchange,提问作者nickreitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:30:48