将所有图片按jpg格式储存,方便图片标注

本文介绍了一个Python脚本,用于批量处理图片文件,确保所有图片都转换为JPEG格式,并解决了因图片模式不兼容导致的保存错误。文章涉及了PIL库的使用,包括图片模式的检查与转换、文件读写等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os
import glob

import numpy as np
from PIL import Image
import os.path

path = '图片文件夹地址'
index = 1
# error1 = Image.open('1.jpg')
# error2 = Image.open('2.jpg')
# image = np.array(error2)
# print(error2.mode, image.shape)
for file in os.listdir(path):
    if os.path.isfile(os.path.join(path, file)):
        # 重命名模块
        # if file.find('.') > 0:
        #     newname = 'towercrane' + str(index) + '.jpg'
        #     index += 1
        #     os.rename(os.path.join(path, file), os.path.join(path, newname))
        # print('ok')
        img_path = os.path.join(path, file)
        im = Image.open(img_path)
        image = np.array(im)
        # 防止图片标注的时候出现bug
        if im.mode == "P":
            im = im.convert('RGB')
            os.remove(img_path)
            im.save(img_path[:-4] + ".jpg")
            print('p removed')  # 8位像素,使用调色板映射到任何其他模式
            continue
        if im.mode == "L":
            im = im.convert('RGB')
            os.remove(img_path)
            im.save(img_path[:-4] + ".jpg")
            print('l removed')  # 8位像素,黑白
            continue
        print(image.shape, img_path)
        if image.shape[2] == 4:
            r, g, b, a = im.split()
            im = Image.merge("RGB", (r, g, b))
            os.remove(img_path)
            im.save(img_path[:-4] + ".jpg")
            print('png removed')
print('only have jpg!')
# 参考链接:https://www.jianshu.com/p/e8d058767dfa
# 模式
# 1             1位像素,黑和白,存成8位的像素
# L             8位像素,黑白
# P             8位像素,使用调色板映射到任何其他模式
# RGB           3×8位像素,真彩
# RGBA          4×8位像素,真彩+透明通道
# CMYK          4×8位像素,颜色隔离
# YCbCr         3×8位像素,彩色视频格式
# I             32位整型像素
# F             32位浮点型像素

出现的错误:

OSError: cannot write mode XX as JPEG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值