首页/文章/ 详情

HyperView二次开发:生成Excel像素画--没用的能力+1

5月前浏览370

  
一、技术原理

本方法的核心是通过Python脚本实现以下转换流程:

  1. 图像采集:从HyperView截图或特定视图

  2. 图像处理:使用Python的Pillow库处理图像

  3. Excel生成:利用openpyxl库创建Excel并设置单元格格式

二、HyperView数据准备

在HyperView中获取适合转换的数据/图像:

  1. 模型截图法

    • 调整到合适视图角度

    • 使用"File > Screen Capture> lmage to File"导出PNG格式图片

  2. 代码截图法

    • 调整到合适视图角度

    • 通过代码截图

# 截图代码
importhw
hw.evalHWC('save image window 0011.png')

三、完整实现步骤

3.1 环境准备

在HyperView已安装所需模块,这里无需安装:

# 安装所需Python库
pip install pillow openpyxl numpy

3.2 转换脚本

fromPILimportImage
fromopenpyxlimportWorkbook
fromopenpyxl.stylesimportPatternFill
fromopenpyxl.utilsimportget_column_letter
importos

importhw

defimage_to_excel_cells(image_pathoutput_excelscale_factor=0.5cell_size_pixels=20):
    """
    将图片转换为Excel单元格填充颜色
    
    参数:
        image_path: 图片文件路径
        output_excel: 输出的Excel文件路径
        scale_factor: 缩放比例(0-1之间)
        cell_size_pixels: 期望的单元格大小(像素)
    """
    # 打开图片
    img = Image.open(image_path)
    
    # 计算新尺寸
    widthheight = img.size
    new_width = int(width*scale_factor)
    new_height = int(height*scale_factor)
    
    # 缩放图片
    img = img.resize((new_widthnew_height), Image.LANCZOS)
    
    # 创建Excel工作簿
    wb = Workbook()
    ws = wb.active
    
    # Excel单位换算
    # 行高单位: 1/72英寸
    # 列宽单位: 1/7字符宽度(默认字符宽度为7像素)
    
    # 计算行高(单位:磅)
    row_height = cell_size_pixels*0.75  # 1像素 ≈ 0.75磅
    
    # 计算列宽(单位:字符)
    column_width = cell_size_pixels/7  # Excel列宽单位
    
    # 遍历图片像素并设置单元格颜色
    foryinrange(new_height):
        forxinrange(new_width):
            # 获取像素颜色(RGB)
            pixel = img.getpixel((xy))
            
            # 处理RGBA或RGB格式
            iflen(pixel) == 4:  # RGBA格式
                rgba = pixel
                ifa<255:  # 如果是透明区域,设置为白色
                    rgb = 255255255
            else:  # RGB格式
                rgb = pixel[:3]
            
            # 转换为十六进制颜色代码
            hex_color = f"{r:02X}{g:02X}{b:02X}"
            
            # 创建填充样式
            fill = PatternFill(start_color=hex_color
                             end_color=hex_color
                             fill_type="solid")
            
            # 获取单元格坐标
            cell = ws.cell(row=y+1column=x+1)
            
            # 应用填充
            cell.fill = fill
    
    # 调整列宽和行高为正方形
    forcolinrange(1new_width+1):
        ws.column_dimensions[get_column_letter(col)].width = column_width
        
    forrowinrange(1new_height+1):
        ws.row_dimensions[row].height = row_height
    
    # 保存Excel文件
    wb.save(output_excel)
    print(f"图片已成功转换为Excel文件: {output_excel}")
    print(f"原始尺寸: {width}x{height}, 缩放后尺寸: {new_width}x{new_height}")
    print(f"单元格尺寸: {cell_size_pixels}像素(近似正方形)")

# 使用示例
if__name__ == "__main__":
    # 输入图片路径和输出Excel路径
    hw.evalHWC('save image window 0011.png')
    image_path = r"0011.png"
    output_excel = "output.xlsx"
    
    # 检查图片是否存在
    ifnotos.path.exists(image_path):
        print(f"错误: 图片文件 '{image_path}' 不存在")
    else:
        image_to_excel_cells(image_pathoutput_excelscale_factor=0.5cell_size_pixels=15)

来源:TodayCAEer
ACTHyperView二次开发pythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-06-20
最近编辑:5月前
TodayCAEer
本科 签名征集中
获赞 55粉丝 158文章 523课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈