V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ko20
V2EX  ›  问与答

有没有一种图片压缩服务能够保留照片的 exif 信息?包含相机制造商,镜头焦距,光圈快门 ISO 这些值

  •  
  •   ko20 · 141 天前 · 1322 次点击
    这是一个创建于 141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近拍照片比较多,发博客和小红书等,需要压缩一下照片。压缩之后保存到自己的 immich 服务当中,浏览照片时镜头相机拍摄参数等信息没了。

    我一直在用 squoosh 在线压缩或者使用命令行批量压缩,但是压缩后丢失了镜头相机等元数据。看了一下 squoosh 官方的某个 issue ,应该不会做这个功能了

    试了一下 tinypng.com ,在线使用会完全抹掉这些信息。也试了一下 api,

    保留元数据.jpg

    只会保留拍摄时间,相机和镜头相关信息没了……

    有没有一种图片压缩服务,能够保留照片的 exif 镜头相机信息?

    第 1 条附言  ·  141 天前

    感谢大家提意见。已经用 exiftool 搞定了(这么好用的的东西现在才知道!

    我是在一个 alpine 容器里操作的。以前写过这篇文章 [可能是]最好的压缩图片程序,使用 squoosh-cli 批量压缩图片 https://hellodk.cn/post/1141

    使用 alpine 安装 exiftoolapk add exiftool

    squoosh-cli 批量压缩

    squoosh-cli --mozjpeg '{"quality":60,"baseline":false,"arithmetic":false,"progressive":true,"optimize_coding":true,"smoothing":0,"color_space":3,"quant_table":3,"trellis_multipass":false,"trellis_opt_zero":false,"trellis_opt_table":false,"trellis_loops":1,"auto_subsample":true,"chroma_subsample":2,"separate_chroma_quality":false,"chroma_quality":75}' \
    -d output \
    -s -dk-compressed \
    *.jpg
    

    再调用一个 shell 脚本即可将原本文件的 exif info 写入 squoosh 压缩后的文件当中。squoosh压缩后文件占用 163KB,写入 exif 信息之后文件占用变成 172KB,可以接受。

    shell 内容如下

    #!/bin/sh
    
    # 检查是否提供了必要的参数
    if [ -z "$1" ] || [ -z "$2" ]; then
        echo "Usage: $0 <input_dir> <output_dir>"
        exit 1
    fi
    
    # 从命令行参数中读取输入目录和输出目录
    input_dir="$1"
    output_dir="$2"
    
    # 检查输入目录是否存在
    if [ ! -d "$input_dir" ]; then
        echo "Input directory '$input_dir' does not exist."
        exit 1
    fi
    
    # 检查输出目录是否存在
    if [ ! -d "$output_dir" ]; then
        echo "Output directory '$output_dir' does not exist, creating it."
        exit 1
    fi
    
    # 定义原始图片目录和输出目录
    input_dir="."
    output_dir="./output"
    
    # 遍历所有 JPG 文件
    for input_file in "$input_dir"/*.jpg; do
        # 提取文件名,不带路径
        filename=$(basename "$input_file")
        
        # 构建目标文件路径
        output_file="${output_dir}/${filename%.jpg}-dk-compressed.jpg"
    
        # 检查压缩后的文件是否存在,以防万一
        if [ ! -f "$output_file" ]; then
            echo "File $output_file does not exist, skipping..."
            continue
        fi
    
        # 复制 EXIF 元数据
        exiftool -TagsFromFile "$input_file" -all:all "$output_file"
        
        # 删除生成的备份文件(-TagsFromFile 操作会创建一个备份文件)
        rm "${output_file}_original"
    done
    
    
    13 条回复    2024-07-16 10:45:42 +08:00
    flyxq
        1
    flyxq  
       141 天前
    这玩意不是 ai 问一下就知道了吗。Python 中的 PIL 库( Pillow )
    tool2dx
        3
    tool2dx  
       141 天前
    你都用命令行压缩了,就是加一行代码的事情,exiftool -TagsFromFile source.jpg -all:all target.jpg
    ko20
        4
    ko20  
    OP
       141 天前
    @flyxq #1 谢谢。不太了解 python 的库
    ko20
        5
    ko20  
    OP
       141 天前
    @tool2dx #3 命令行是用的 squoosh-cli 。可以,感谢你提供的工具
    NoOneNoBody
        6
    NoOneNoBody  
       141 天前
    exiftool 赛高
    tomczhen
        7
    tomczhen  
       141 天前
    xnview 应该可以
    conky
        8
    conky  
       141 天前
    synology photo 会提供压缩的 jpg ,保留了这些信息
    jasonlu233
        9
    jasonlu233  
       141 天前
    libvips
    ko20
        10
    ko20  
    OP
       141 天前
    谢谢大家,已经用 exiftool 搞定了,太强了。详情见附言
    ko20
        11
    ko20  
    OP
       141 天前
    @tomczhen #7 在一个 stackoverflow/reddit 帖子上似乎也看到了说使用 xnview
    chen1210
        12
    chen1210  
       141 天前
    Adobe Lightroom
    ko20
        13
    ko20  
    OP
       140 天前
    直接通过压缩得到保留 exif 元数据图片的压缩服务,今天发现下面这个网站可以

    - GitHub https://github.com/Lymphatus/caesium-image-compressor
    - 在线尝试 https://caesium.app/

    ---

    当然我现在的工作流是更适合我自己的。squoosh 压缩有比较大的自定义权限。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1308 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.