推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
teli
V2EX  ›  Python

怎么搞定纯 Python 代码解码 jpg 图片,要求无外部依赖

  •  1
     
  •   teli · Jul 2 · 21926 views
    This topic created in 124 days ago, the information mentioned may be changed or developed.
    这样的,我想用 tkinter 写一个无外部依赖的 GUI 程序
    但发现 python 不原生支持 jpg
    再三考虑,想到一个办法
    网上找一段纯 python 代码(无依赖),插入到项目中

    注意有个前提,可以接受牺牲图片的部分质量

    网上确实有这样的代码,大概几百行
    问题是网上的代码,只能成功解码部分 jpg 图片,很多图片的处理过程都报错了

    也试过让大语言模型去生成,但是受限于长度限制,都生成失败了
    Supplement 1  ·  Jul 3
    暂时放弃这个念头了
    原因一:jpg 太复杂,网上能找到的可用的 pure python 解码器只支持部分特征
    原因二:pure python 解码 jpg 真的很慢
    30 replies  •  2026-09-19 21:34:18 +08:00
    hertzry
    hertzry
    Jul 2 via Android
    1
    那你把依赖的库源码全粘贴到本地呗。
    ycl10875222
    2
    换个思路不就好了 用 python 的内置库把 jpg 转成 png 然后用 tk 解析 png,你都接受牺牲图片质量了 那丢点信息也无所谓了
    TrackBack
    3
    让 AI 帮你重写一遍 stb_image 到纯 python ,原来的 C 代码也就 8000 行
    不过最好说清楚你这里的“无外部依赖”具体指什么、需求是为什么,这样可行方案会更多
    teli
    teli
    OP
    Jul 2
    4
    @ycl10875222 都说了 python 不支持 jpg
    jko123
    jko123
    Jul 2
    5
    为什么要那么费劲,不用依赖,PIL 也算是标准库了吧
    paopjian
    6
    咱也不懂你为什么有第三方库洁癖, python 只是框架, 第三方才完善了各种功能, jpg 看着简单内部有大量算法优化存储的, 不然你让 AI 去读 PIL 库从 C 反写成 python 得了
    hackfly
    hackfly
    Jul 2
    7
    jpg 自己搞,开玩笑,bmp/tga 自己搞还差不多
    hefish
    hefish
    Jul 2
    8
    我也想用 python 实现一个 c++编译器, 我准备让豆包大模型来做。
    Chemist
    Chemist
    Jul 3❤️2
    9
    你为什么想用 tkinter 写一个无外部依赖的 GUI 程序?
    感觉又是一个 XY problem
    jim9606
    jim9606
    Jul 3 via Android
    10
    不知道你为啥要图这个无依赖洁癖

    一种思路是别有这种洁癖,找一个 libjpeg 的绑定库来做,例如 pylibjpeg-libjpeg 。libjpeg 是事实标准,不用担心移植不了的问题,而且也不是大包大揽的库,不会引入复杂依赖

    第二种思路是用系统的媒体 api,例如 windows 的 wic 。不过这并不跨平台,得自己写 interprop,不如第一种省事简单
    drymonfidelia
    11
    编译成 onefile 再反编译
    XIVN1987
    13
    找个单文件的 jpeg 解码库,,把它直接放到自己的工程目录下。。

    我用 bottle 就是直接把它放到自己工程目录下,,这样就相当于没有外部依赖了。。
    tf2
    tf2
    Jul 3
    14
    你是想在 tkinter 展示 jpg ,还是想自己读取 jpg 的 RGB 像素处理然后在 tkinter 展示??
    labubu
    labubu
    Jul 3
    15
    系统 api
    clemente
    16
    用 go 写一个 编译好 打包进去
    clemente
    17
    1.编写 Go 动态链接库代码
    2.Python 使用内置 ctypes 进行 FFI 调用
    erquren
    erquren
    Jul 3
    18
    刻板映像 +1
    noahliaszn
    19
    很抽象, 用 python 写一个 gui,然后又要无依赖,
    那为什么不用纯 c 写, 既要又要的感觉
    woshishui2022
    20
    闲的蛋疼,python 不装第三方库能干嘛啊,估计你这 GUI 程序也就是自己玩玩的
    yougg
    yougg
    Jul 3
    21
    你让计算机编程届最标志性的胶水编程语言不要外部依赖, 那不如直接换个语言来写了.
    wangtian2020
    22
    那就把外部依赖拷进来变成内部依赖
    UnluckyNinja
    23
    python 搞 GUI 是次选中的次选吧,嫌 electron 大就算了,那为什么不走 python 社区一惯做法:跑一个本地的 HTTP 服务,让用户去浏览器用前端。你听说过 gradio 吗?
    deplives
    24
    没苦硬吃?
    sir283
    sir283
    Jul 4
    25
    你都用 python 了,还要无外部依赖?你还活在二十年前吗?那你为什么不直接用 Java 或者 C 语言写呢?为什么不直接用汇编手搓算法呢?哦,对了,python 是可以打包成 exe 的,用 pyinstaller ,如果你是在乎这个的话。
    yuruizhe
    26
    你都找到了网上的开源实现了,再深入调试一下呗
    不过估计大部分 bug 都是数学公式没实现好
    看了下 jpeg 的解码介绍,什么霍夫曼解码,差分脉冲编码调制,zigzag 扫描,离散余弦变换与逆变换,双线性差值上采样,头都大了
    手搓这种轮子,我想都不敢想
    awesome123
    27
    我可以做一个,前提是你程序是做着玩的,还是真有用?
    teli
    teli
    OP
    Aug 1
    28
    @awesome123 已经放弃了。计划是系统中搜索可以转换图片格式的命令。但目前还没进行到这步
    awesome123
    awesome123
    Aug 7 via Android
    29
    @teli imagemagisk 能直接转换啊,你用命令行
    iorilu
    iorilu
    Sep 19
    30
    没明白为啥不能用依赖

    两种方法
    要么找个纯算法实现的库, 可能是 c 或者啥的, 让 ai 改写成 python

    要么上面有人说的, 调用外部工具, 比如 magick
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2153 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    ♥ Do have faith in what you're doing.