@edis0n0 只能搞到 jpeg 就代表已经有损失了,后续的所谓不想有画质损失都基本免谈。 到头来就是你能不能接受的问题,唯一的方法就是合并之后再保存为 jpeg ,压缩度开低点,之后安慰自己已经无损了。 jpeg 压缩时候记得是分析整张图的频率信息,丢弃高频项,所以没法直接合并。 更简单的方法就是存两张图...
楼上好像都没理解楼主的需求啊,楼主是想避免二次压制。让合并的图像素级对应原图是可行的,jpg 量化系数和原图一致就成。网上大概有摆弄 jpeg 的现成工具,实在没有的话,用 libjpeg 自己写一个吧
楼主的意思应该是解码 jpg 之后又重新编码为 jpg 是不是会有画质损失。如果次数很少的话损失应该没多大的。但是需要重复好多次的话就会有较为明显的画质损失了(几十上百次 贴吧各种包浆的表情包就是这么来的
写过 JPEG 编码器,对 JPEG 略知一二。 理论上两张 JPEG 是存在完全无损拼接的可能性的,但是条件比较苛刻: 1. 长宽像素是 8 的整数倍( YUV422 采样的情况下应该是要 16 的整数倍) 2. 两张 JPEG 有着相同的 Huffman 表和量化表 3. (暂时没想到,可能还有) 总之很苛刻,如果两张 JPEG 压缩的参数不一样(尤其是量化表,用于控制有损压缩效果),拼接只能有损处理。 所以 JPEG 无损裁剪的工具很常见(单个文件只有一种参数设定),而无损拼接的几乎没有。
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]) ...