最近需要对图片进行处理,原因是往3d模型上贴图需要不带背景的图片,而一般图片或AI生成的图片都是有背景的,因此我需要对图片去背景化。
好的,废话不多说,直接上源码吧
from rembg import remove
from PIL import Image
input = Image.open('图片路径')
output = remove(input)
# 保存到本地
output.save('输出图片路径')
需要安装相应的安装包
pip install rembg
pip install pillow
非常简单,当然还可以在此基础上做一下修改,给一个图片的url,处理后上传oss
from rembg import remove
from PIL import Image
import requests
from io import BytesIO
import oss2
import string
import random
access_key_id = "oss_id"
access_key_secret = "oss密钥"
bucket_name = "bucket名称"
endpoint = "endpoint"
auth = oss2.Auth(access_key_id, access_key_secret)
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# 图片的URL地址,替换为你实际要处理的图片的URL
url = "https://xxxxxx/173313232927266436.png"
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功,若不成功则抛出异常
# 将获取到的图片内容转换为BytesIO对象,使其能像本地文件对象一样被Pillow库处理
image_bytes = BytesIO(response.content)
input = Image.open(image_bytes)
output = remove(input)
# 拼接这部分可以去掉
url_parts = url.split('/')
url_middle_part = '/'.join(url_parts[3:-1])
# 生成一个随机数
random_num = ''.join(random.choices(string.digits, k=16))
object_key = url_middle_part + '/' + random_num + '.png'
# 拼成url
file_url = '/'.join(url_parts[0:3]) + '/' + object_key
# 保存到oss
output_img_bytes = BytesIO()
output.save(output_img_bytes, format='PNG')
bucket.put_object(object_key, output_img_bytes.getvalue())
print("图片处理并上传oss成功", file_url)
看一下最后的效果吧
效果还是可以的