PicSharp:开源、多平台、小而美的图片压缩工具,支持本地和 TinyPNG 压缩 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Jaylen
V2EX    分享创造

PicSharp:开源、多平台、小而美的图片压缩工具,支持本地和 TinyPNG 压缩

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

    项目地址: https://github.com/AkiraBit/PicSharp

    开发这个应用的初衷来自于自己以及身边人(对象是产品经理,同事朋友主要从事互联网开发、运营、摄影以及平面设计等等)的需求,我主业是全栈软件开发,对于我来说,工作项目的图片压缩基本由 CI 来完成,但日常工作生活依旧会有很多需要手动压缩图片的场景,除了使用网站压缩外,还用了一段时间 Tinypng4Mac ,可惜存在不少已知问题且应该是不维护了,以及压缩控制条件配置少、只能配置一个 API KEY ,对于有多个账号且经常用超免费额度的我来说,用起来不够爽,因此打算根据自己的想法和工作流开发一个。

    PicSharp 在年前开始立项,工作之余开发了差不多 3 个月,开发期间主要是我自己、身边的同事朋友们在使用,听取了他们的一些想法建议以及参考了一些 PC 图片压缩软件,欢迎大家使用和反馈

    主要特性

    1. 基于 Tauri V2 和 React 技术栈开发,支持 Mac 、Windows 、Linux 。由于我工作主力机是 Mac ,因此 Mac 上系统集成能力更强些,例如整合到 Finder 的服务菜单等等,相关功能 Windows 后续也会支持。
    2. 支持本地压缩和 TinyPNG 。本地压缩支持PNGJPEGWebP/Animated WebPAVIFTIFFGIFSVG7 种格式; TinyPNG 支持多 API Keys 管理,自动校验 Key 有效性并在不可用时切换到可用 Key 上。
    3. 监控目录新增图片并自动压缩:类似开发时的 watch ,当被监听的目录有新增图片时,自动触发压缩,不再需要手动压缩后复制到工作目录,实现自动化工作流。
    4. 强大批处理能力:得益于 Rust 优异的 IO ,轻松应付 10w+的文件遍历与解析,高效率、低占用完成图片压缩批处理,本地压缩模式下,10w 张图片压缩只需 8 分钟左右。
    5. Deeplink 调用,不管是脚本还是其它 APP 都可以通过URL Scheme获得 PicSharp 完整的图片压缩能力。

    其他功能详情请移步 Github 主页。

    后续计划

    1. 格式转换、抠图功能
    2. 更精细的压缩条件控制(尺寸控制、最小压缩体积控制等等)
    3. 基于已有的 Deeplink 能力,集成到 Raycast 中
    4. 本地 MCP 服务
    5. 开发产品及文档官网

    如果对你有帮助,点个吧,感兴趣的朋友可以一起参与共建

    11 条回复    2025-06-09 12:10:04 +08:00
    deacyn
        1
    deacyn  
       129 天前
    很强,已 Star !
    waytocode
        2
    waytocode  
       129 天前
    既然已经是本地压缩,为什么要要用 tinypng ,需要调用 API 上传到 tinypng 么
    Jaylen
        3
    Jaylen  
    OP
       128 天前
    @waytocode 这是两种模式,可以在设置里自由切换。追求精致压缩比可以选择 TinyPNG 模式,但需要提前配置 API Key ;图片量大,需要高效批处理或者有隐私安全要求,可以选择本地压缩。
    Jaylen
        4
    Jaylen  
    OP
       128 天前
    @deacyn 感谢支持!
    beyondstars
        5
    beyondstars  
       127 天前
    我让 claude 给我生成一段 ffmpeg 命令行代码,是不是也能完成类似的需求。
    deacyn
        6
    deayn  
       127 天前
    测试了一下,选择了本地无损压缩最后生成的图片和原图还是有一些区别。
    Jaylen
        7
    Jaylen  
    OP
       127 天前
    @beyondstars 当然,但是杀鸡焉用牛刀,对于绝大部分非开发者而言,未必接触过 ffmpeg 和命令行,最简单的方法还是打开一个图片压缩网站;其次 ai 生成 ffmpeg 命令行代码再执行我觉得效率不高且无法复用,最好封装成一个专用 agent ;如果要使用 cli 工具的话,ffmpeg 也不是最佳选择,pngquant 、mozjpeg 等在压缩比和编码器参数精细控制上更具优势
    beyondstars
        8
    beyondstars  
       126 天前
    命令行就能干成大多数事,也不用加载一大堆额外资源。把命令行能做的,写一大堆 prompt, js, css, go 搬到 web 上,想不出有什么比这更无聊。我不是针对谁,所有类似的项目都是如此。

    当然,有的软件确实需要复杂 ui 才能运行:photoshop, aftereffect cad 等,不过那不属于我说的。
    Jaylen
        9
    Jaylen  
    OP
       124 天前
    @deacyn 可以发下图片吗,我看看啥问题
    Jaylen
        10
    Jaylen  
    OP
       124 天前
    @deacyn 找到问题了,是由于对编码器的色彩量化程度控制不够合理造成的。png 是一种无损压缩格式,对其进行有损压缩是通过人为引入的数据精简过程(如色彩量化、去噪等)实现的,而不是基于 png 格式标准。和 TinyPNG 一样,本地压缩也是通过对原图进行“有损色彩量化”( 如将 24-bit RGB 原彩 调整为为 8-bit 基于调色板的索引色模式)来实现,当色彩量化控制不合理时,就会导致压缩后的图片某些地方偏离原本的颜色,该问题将在 1.2.1 版本修复,感谢纠正!
    deacyn
        11
    deacyn  
       124 天前 via iPhone
    @Jaylen 支持!加油
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2572 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:03 PVG 10:03 LAX 19:03 JFK 22:03
    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