jpg 能做到无损合并吗?一个网页游戏每个场景背景图都是左右半边各一张 jpg 拼起来的,我想无损拼接但不想保存成 png,有可能实现吗?

查看 254|回复 19
作者:edis0n0   
什么叫“无损拼接”?
你能看见图的时候,jpg 已经还原成像素矩阵了,该损的也已经损完了。
不考虑缩放的话,你直接截个图都可以。

jpg, 无损, 半边, PNG

Mithril   
大概不能。jpeg 压缩时应该是用了 DCT 的,这东西好像没法做拼接。
话说你都用 jpeg 这种有损压缩了还考虑什么无损拼接有意思吗..
sakura6264   
@sakura6264 #2 用 jpg 是因为只能搞到 jpg ,收藏用不想有画质损失,如果转成 png 有点浪费空间
edis0n0
OP
  
读到内存中,转为矩阵,然后相加,再输出。
zhangberry   
@edis0n0 只能搞到 jpeg 就代表已经有损失了,后续的所谓不想有画质损失都基本免谈。
到头来就是你能不能接受的问题,唯一的方法就是合并之后再保存为 jpeg ,压缩度开低点,之后安慰自己已经无损了。
jpeg 压缩时候记得是分析整张图的频率信息,丢弃高频项,所以没法直接合并。
更简单的方法就是存两张图...
sakura6264   
楼上好像都没理解楼主的需求啊,楼主是想避免二次压制。让合并的图像素级对应原图是可行的,jpg 量化系数和原图一致就成。网上大概有摆弄 jpeg 的现成工具,实在没有的话,用 libjpeg 自己写一个吧
favourstreet   
楼主的意思应该是解码 jpg 之后又重新编码为 jpg 是不是会有画质损失。如果次数很少的话损失应该没多大的。但是需要重复好多次的话就会有较为明显的画质损失了(几十上百次
贴吧各种包浆的表情包就是这么来的
BeautifulSoap   
写过 JPEG 编码器,对 JPEG 略知一二。
理论上两张 JPEG 是存在完全无损拼接的可能性的,但是条件比较苛刻:
1. 长宽像素是 8 的整数倍( YUV422 采样的情况下应该是要 16 的整数倍)
2. 两张 JPEG 有着相同的 Huffman 表和量化表
3. (暂时没想到,可能还有)
总之很苛刻,如果两张 JPEG 压缩的参数不一样(尤其是量化表,用于控制有损压缩效果),拼接只能有损处理。
所以 JPEG 无损裁剪的工具很常见(单个文件只有一种参数设定),而无损拼接的几乎没有。
mikewang   
@favourstreet #6 对,就是这个意思
@mikewang #8 第一个条件就满足不了,看来是不行
edis0n0
OP
  
import cv2, numpy
cvim1 = cv2.imread(jpg1)
cvim2 = cv2.imread(jpg2)
h,w = cvim1.shape[:2]
cvim2=cv2.resize(cvim2, (w, h), interpolation=inter)
merge = numpy.hstack([cvim1, cvim2])
...
您需要登录后才可以回帖 登录 | 立即注册

返回顶部