有没有一种图片压缩服务能够保留照片的 exif 信息?包含相机制造商,镜头焦距,光圈快门 ISO 这些值 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ko20
V2EX    问与答

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

  •  
  •   ko20 2024-07-15 10:33:18 +08:00 1825 次点击
    这是一个创建于 453 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    保留元数据.jpg

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

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

    第 1 条附言    2024-07-15 11:42:14 +08:00

    感谢大家提意见。已经用 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  
       2024-07-15 10:38:46 +08:00
    这玩意不是 ai 问一下就知道了吗。Python 中的 PIL 库( Pillow )
    tool2dx
        3
    tool2dx  
       2024-07-15 10:45:44 +08:00
    你都用命令行压缩了,就是加一行代码的事情,exiftool -TagsFromFile source.jpg -all:all target.jpg
    ko20
        4
    ko20  
    OP
       2024-07-15 10:47:46 +08:00
    @flyxq #1 谢谢。不太了解 python 的库
    ko20
        5
    ko20  
    OP
       2024-07-15 10:48:41 +08:00
    @tool2dx #3 命令行是用的 squoosh-cli 。可以,感谢你提供的工具
    NoOneNoBody
        6
    NoOneNoBody  
       2024-07-15 10:49:41 +08:00
    exiftool 赛高
    tomczhen
        7
    tomczhen  
       2024-07-15 11:09:00 +08:00
    xnview 应该可以
    conky
        8
    conky  
       2024-07-15 11:16:02 +08:00
    synology photo 会提供压缩的 jpg ,保留了这些信息
    jasonlu233
        9
    jasonlu233  
       2024-07-15 11:26:54 +08:00
    libvips
    ko20
        10
    ko20  
    OP
       2024-07-15 11:42:41 +08:00
    谢谢大家,已经用 exiftool 搞定了,太强了。详情见附言
    ko20
        11
    ko20  
    OP
       2024-07-15 11:43:14 +08:00
    @tomczhen #7 在一个 stackoverflow/reddit 帖子上似乎也看到了说使用 xnview
    chen1210
        12
    chen1210  
       2024-07-15 11:44:10 +08:00
    Adobe Lightroom
    ko20
        13
    ko20  
    OP
       2024-07-16 10:45:42 +08:00
    直接通过压缩得到保留 exif 元数据图片的压缩服务,今天发现下面这个网站可以

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

    ---

    当然我现在的工作流是更适合我自己的。squoosh 压缩有比较大的自定义权限。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     863 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:47 PVG 05:47 LAX 14:47 JFK 17:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86