admin管理员组

文章数量:1516870

目录


===============

前言

佳能相机的图片格式CR3,Windows识别,微信上根本无法识别。。。

而且图片刚打开颜色亮度正常,隔几秒后图片便会变暗。

解决

把图片转换为JPG格式,在转换的同时,设置亮度

前提准备

需要安装Pyhon(网上相关资料一大堆)

安装需要的库

 pip install rawpy
 pip install imageio
直接pip 无效时,使用完整路径运行pip命令
python -m pip install rawpy

启动脚本

@echo off
rem pause
echo waiting...
"C:\Program Files\Python38\python.exe" ./convert.py
pause

核心代码(Python)(convert.py)

测试可用

use_auto_wb=False,  # 使用自动白平衡
no_auto_bright=True,  #
允许自动亮度调整

上面的设置后,和图片刚刚打开变暗前的效果一致

bright=3.5,            # 增加亮度 (默认 0.25)

上面这行代码很重要,不写的话,转换后的代码会偏暗

import rawpy
import numpy as np
from PIL import Image
import os
def convert_cr3_to_jpg(cr3_path, jpg_path, quality=100):
    """使用 rawpy + Pillow 转换 CR3 到 JPG"""
    try:
        # 确保输出目录存在
        os.makedirs(os.path.dirname(jpg_path), exist_ok=True)
        
        print(f"开始处理: {cr3_path}")
        
        # 读取 RAW 文件
        with rawpy.imread(cr3_path) as raw:
            print("RAW 文件已读取")
            
            # 获取图像数据(使用简化参数)
            rgb = raw.postprocess(
                output_color=rawpy.ColorSpace.sRGB,
                use_auto_wb=False,  # 不 使用自动白平衡
                no_auto_bright=True,  # 不 允许自动亮度调整
                bright=3.5,            # 增加亮度 (默认 0.25)
                gamma=(2.2, 4.0)  # 标准 gamma 校正
            )
            print("图像处理完成")
            
            # 确保数据类型正确
            if rgb.dtype != np.uint8:
                # 转换为 8 位整数 (0-255)
                rgb = (rgb * 255 / rgb.max()).astype(np.uint8)
            
            # 创建 Pillow 图像并保存为 JPG
            img = Image.fromarray(rgb)
            img.save(jpg_path, 'JPEG', quality=quality)
            print(f"成功保存: {jpg_path}")
            
        return True
        
    except Exception as e:
        print(f"转换失败: {str(e)}")
        # 提供详细错误信息
        import traceback
        traceback.print_exc()
        return False
# 使用示例
success = convert_cr3_to_jpg(
    r'C:\test\python\CR3_convert\IMG_1047.CR3',
    r'C:\test\python\CR3_convert\output.jpg',
    quality=90
)
if success:
    print("转换成功!")
else:
    print("转换失败")

------运行效果

------

Python 模块介绍

  • rawpy :用于读取和处理 RAW 图像文件
  • numpy :处理图像数据的数值计算
  • PIL.Image :将处理后的图像保存为 JPG 格式
  • os :处理文件路径和目录创建

---

本文标签: 白平衡格式编程