赞
踩
原始图片
写入excel的效果
# by zengxy + chatgpt # from https://blog.csdn.net/imwaters import os import xlsxwriter from PIL import Image class Image2Xlsx(): def __init__(self,xls_path, head_list=['编号', '图片', '名称', "描述",'备注'], set_default_y=112, set_default_x=224 ): # create a new Excel file and add a worksheet self.workbook = xlsxwriter.Workbook(xls_path) self.worksheet = self.workbook.add_worksheet() # title self.add_head( headers=head_list) self.image_row_index = 1 # 第一行的序号为0,用来写head,所以索引从行1开始 self.image_col_index = 1 # 设置默认行高 self.worksheet.set_default_row(set_default_y) self.fix_img_cell_x_width= set_default_x self.fix_img_cell_y_width = set_default_y # 设置 1-4列的像素宽度为224 self.worksheet.set_column_pixels(first_col=1,last_col=4, width=self.fix_img_cell_x_width) def close(self): self.workbook.close() def add_head( self,headers ): # 设置表头的格式 header_format = self.workbook.add_format({'bold': True, 'align': 'center'}) # 定义表头列表 # 在第一行循环写入表头 for col, header in enumerate(headers): self.worksheet.write(0, col, header, header_format) def cal_img_scale(self, img_width, img_height): """ 计算图片的缩放比例,以便将图片适配至Excel单元格中。 如果图片高度是宽度的1.5倍,则将单元格高度增加64像素。 """ # 设定宽高比例差异的阈值和宽度调整阈值 aspect_ratio_thresh = 1.5 cur_cell_width=self.fix_img_cell_y_width if img_width > img_height * aspect_ratio_thresh: cur_cell_width+= 64 # 计算缩放比例,如果图片过宽,则进一步调整 # 计算当前宽,和高度分别是原图像的倍数,以最小的为缩放比例 scale = min(cur_cell_width / img_height,self.fix_img_cell_x_width/img_width) # print('scale',scale) return scale def wirte_one_images_2_xls(self,image_path, content='by_gpt',other_des="暂时没有"): cur_dir,file_name=os.path.split(image_path) img_width, img_height = Image.open(image_path).size # 计算缩小放大比例 scale=self.cal_img_scale( img_width, img_height) print("old_size:",img_width, img_height) print("cur_size:",int(img_width*scale), int(img_height*scale)) ''' 写序号,第0列 ''' self.worksheet.write(self.image_row_index, self.image_col_index - 1, str(self.image_row_index)) ''' 写入图片第2列 序号1 ''' self.worksheet.insert_image(self.image_row_index, self.image_col_index, image_path, { 'x_scale': scale, 'y_scale': scale, # 'x_offset': 5, 'y_offset': 5, # 'positioning': 1 # 1 表示图片被定位为与单元格移动和大小改变而移动和改变大小。它使得图片与单元格"绑定"。 } ) ''' 写入图片名称 ''' self.worksheet.write(self.image_row_index, self.image_col_index + 1, file_name ) ''' 描述内容,可以是gpt生成的描述 ''' self.worksheet.write(self.image_row_index, self.image_col_index + 2, content) ''' 备注信息 ''' self.worksheet.write(self.image_row_index, self.image_col_index + 3, other_des) # 指向到下一行 image2xls.image_row_index += 1 if __name__ == '__main__': excel_path = './test.xlsx' images_directory = r'./imgaes' # Replace with the path to your images image2xls= Image2Xlsx(excel_path, set_default_x=224, set_default_y=112) for file in sorted(os.listdir(images_directory)): img_path=os.path.join(images_directory,file ) content="自动生成的描述,可以是gpt打标" other_des="这里填写你的备注信息" image2xls.wirte_one_images_2_xls(img_path,content,other_des) # 不关闭会报错 image2xls.close()
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。