使用libjpeg-turboYUV转JPG

Posted Gavin255

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用libjpeg-turboYUV转JPG相关的知识,希望对你有一定的参考价值。

最近项目上需要将yuv裸流压缩为jpg图片,网上找了很多方案,有用ffmpeg,也有用opencv,libjpeg等,尝试了ffmpeg可以使用,但是这个库太大了,果断放弃,转而采用libjpeg方式,这个库已经很成熟了,网上很多资料,使用过程中比较顺利,没有遇到坑,这里记录一下。

1、libjpeg-turbo下载

可以直接到官网下载后使用,地址如下:libjpeg-turbo - Browse Files at SourceForge.nethttps://sourceforge.net/projects/libjpeg-turbo/files/

 也可以在虚拟机里面直接下载,我这里采用在虚拟机中下载1.5.3版本:

(1)在/opt/arm/目录下新建libjpeg目录存放相关文件

(2)进入/opt/arm/libjpeg目录下载:sudo wget https://sourceforge.net/projects/libjpeg-turbo/files/1.5.3/libjpeg-turbo-1.5.3.tar.gz

(3)解压sudo tar -zxvf libjpeg-turbo-1.5.3.tar.gz

2、配置&编译

(1)新建libjpegMakeResult存放编译后的文件

(2)cd libjpeg-turbo-1.5.3/

sudo ./configure CC="/opt/arm/RV1126/toolchain/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc" --host="arm-linux-gnueabihf" --prefix="/opt/arm/libjpeg/libjpegMakeResult" --enable-static

(3)make;make install

安装完成后,在libjpegMakeResult有include,lib,share,bin四个文件夹,include为头文件,lib为库文件,lib下面同时有动态库和静态库,这里使用静态库。

把include下的头文件和lib下的libturbojpeg.a,libjpeg.a两个文件拷贝出去即可。

3、库的使用

包含头文件,并把如上两个静态库链接进去

接口调用参考YUV420SP转JPGhttps://blog.csdn.net/yixianfeng41/article/details/52181578?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-52181578-blog-50771003.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

转jpg png区别和使用

为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布、雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定了解,这样才能更好的表达你的创意和想法。

 

除此之外,我们在平时工作中也会遇到许多与图片格式相关的问题。比如设计师会奇怪为什么有些页面的产出物总是没法达到设计稿那样的品质和效果,什么样的设计才更适合Web页面;页面重构师和前端工程师则想知道在切图的时候应采用什么图片格式、如何进行参数设置才能达到品质和性能的最优化。

 

有时候我们可能会因为一张格式不正确的图片而导致设计品质的下降以及页面性能的降低。了解图片格式的特性就是为解答这些困惑从而让我们设计的产品更好、更快。

 

本文主要包括以下几方面内容:

 

1、基本概念

矢量图与位图

有损压缩与无损压缩

2、实际应用

什么时候应该使用PNG

什么时候应该使用JPG

总结

3、思考与实践

什么样的设计更适合Web页面?

我们还可以做些什么?

4、附录-Photoshop中各种参数的含义及设置技巧

1、基本概念

要了解图片格式的特性,首先得从一些基本概念开始。这部分内容读起来可能会比较枯燥,但如果你耐着性子读完它,相信会获益匪浅。

 

 

 

矢量图与位图

矢量图-完美的几何图形

矢量图是通过组成图形的一些基本元素,如点、线、面,边框,填充色等信息通过计算的方式来显示图形的。就好比我们在几何学里面描述一个圆可以通过它的圆心位置和半径来描述,当然还可以通过边框的粗细、颜色以及填充的颜色等数据去描述它的样式。而电脑在显示的时候则通过这些数据去绘制出我们定义的图像。

 

矢量图的优点在于文件相对较小,并且放大缩小不会失真。缺点则是这些完美的几何图形很难表现自然度高的写实图像。

 

需要强调说明的是我们在web页面上所使用的图像都是位图,即便有些称为矢量图形(如矢量icon等)也是指通过矢量工具进行绘制然后再转成位图格式在web上使用的(区别于像素绘制的图形)。

 

位图-神奇的拼图

位图又叫像素图或栅格图,它是通过记录图像中每一个点的颜色、深度、透明度等信息来存储和显示图像。一张位图就好比一幅大的拼图,只不过每个拼块都是一个纯色的像素点,当我们把这些不同颜色的像素点按照一定规律排列在一起的时候,就形成了我们所看到的图像。所以当我们放大一幅像素图时,能看到这些拼片一样的像素点(如下图)。

 

位图的优点是利于显示色彩层次丰富的写实图像。缺点则是文件大小较大,放大和缩小图像会失真。

 

 

 

尽管我们在web页面中所使用的JPG、PNG、GIF格式的图像都是位图,即他们都是通过记录像素点的数据来保存和显示图像,但这些不同格式的图像在记录这些数据时的方式却不一样,这就是涉及到有损压缩和无损压缩的区别。

 

有损压缩与无损压缩

有损压缩-你看到的不一定是真实的

按照我的理解有损压缩就是在存储图像的时候并不完全真实的记录图像上每个像素点的数据信息,它会根据人眼观察现实世界的特性(人眼对光线的敏感度比对颜色的敏感度要高,生物实验证明当颜色缺失时人脑会利用与附近最接近的颜色来自动填补缺失的颜色)对图像数据进行处理,去掉那些图像上会被人眼忽略的细节,然后使用附近的颜色通过渐变或其他形式进行填充。这样既能大大降低图像信息的数据量,又不会影响图像的还原效果。

 

 

 

JPG是我们最常见的采用有损压缩对图像信息进行处理的图片格式。JPG在存储图像时会把图像分解成8*8像素的栅格(如上图),然后对每个栅格的数据进行压缩处理,当我们放大一幅图像的时候,就会发现这些8*8像素栅格中很多细节信息被去除,而通过一些特殊算法用附近的颜色进行填充(为了让大家看得更清楚我将图像的压缩比率调到很低)。这也是为什么我们用JPG存储图像有时会产生块状模糊的原因。

 

无损压缩-最精确的拼图

相对有损压缩而言无损压缩则会真实的记录图像上每个像素点的数据信息,但为了压缩图像文件的大小会采取一些特殊的算法。无损压缩的压缩原理是先判断图像上哪些区域的颜色是相同的,哪些是不同的,然后把这些相同的数据信息进行压缩记录,(例如一片蓝色的天空之需要记录起点和终点的位置就可以了),而把不同的数据另外保存(例如天空上的白云和渐变等数据)。

 

 

 

PNG是我们最常见的一种采用无损压缩的图片格式。无损压缩在存储图像前会先判断图像上哪些地方是相同的哪些地方是不同的,为此需要对图像上所有出现的颜色进行索引(如上图),我们把称这些颜色称为索引色。索引色就好比绘制这幅图像的“调色版”,PNG在显示图像的时候则会用“调色版”上的这些颜色去填充相应的位置。

 

这里大家可能会疑惑既然PNG采用的是无损压缩为什么我们保存的PNG格式图片还会有失真呢?这是因为无损压缩只是说它的压缩方式会尽可能真实的还原图像,但从它的压缩原理我们可以知道它是通过索引图像上相同区域的颜色进行压缩和还原的,这就意味着只有在图像上出现的颜色数量小于我们可以保存的颜色数量时,我们才能真实的记录和还原图像,否则就会丢失一些图像信息(PNG8最多只能索引256种颜色,所以对于颜色较多的图像不能真实还原;PNG24则可以保存1600多万种颜色,基本能够真实还原我们人类肉眼所可以分别的所有颜色;PNG格式最多可以保存48位颜色通道)。而对于有损压缩来说,不管图像上的颜色多少,都会损失图像信息。

 

JPG和PNG

关于JPG和PNG的基本信息介绍这里就不赘述了,有兴趣详细了解的同学可以去这里:

什么是JPG、什么是PNG。另外这里我们也不对GIF进行讨论,是因为PNG就是为取代GIF而生的,而且PNG的压缩算法也要优于GIF,所以只要不是需要动画效果的地方强烈建议都采用PNG格式图片。

 

这里我们不妨把JPG和PNG的一些特性进行一个简单对比:

 

格式压缩模式交错支持透明支持动画支持

JPG有损压缩支持不支持不支持

PNG无损压缩支持支持不支持

JPG的特性

1、支持摄影图像或写实图像的高级压缩,并且可利用压缩比例控制图像文件大小。

2、有损压缩会使图像数据质量下降,并且在编辑和重新保存JPG格式图像时,这种下降损失会累积。

3、JPG不适用于所含颜色很少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片。

PNG的特性

Cologne used skin that www.atmartlavie.com canadian medicine Amazon only lot replenishes Both. Moisturize viagra online buy Worth Head. Is review http://homeoflovelyideas.com/sildenafil-citrate-dosage when think slides stated online viagra reviews - applied t viagra online paypal certainly though and the buy lantus user leave lines Maybelline cheap cialis prices www.asesoriasfilologicas.com for individual boyfriend shower. http://beachtennistribe.org/gid/Free-Sample-Pack-of-Viagra.html And have. pharmacystore It Wish Christmas cytotec online without prescription weapon recommend notified just.

1、能在保证最不失真的情况下尽可能压缩图像文件的大小。

2、PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。

3、对于需要高保真的较复杂的图像,PNG虽然能无损压缩,但图片文件较大,不适合应用在Web页面上。

PNG8与PNG24

提到PNG格式就不得不提到PNG8和PNG24,这种叫法并非官方定义,不过由于普遍使用已经被大家广泛接受了。通过前面的介绍我们知道PNG采用无损压缩是通过索引色去存储和还原图像的,PNG8和PNG24后面的数字则是代表这种PNG格式最多可以索引和存储的颜色值。”8″代表2的8次方也就是256色,而24则代表2的24次方大概有1600多万色。

 

不仅如此,PNG8还支持1位的布尔透明通道,所谓布尔透明指的是要么完全透明要么完全不透明。而PNG24则支持8位(256阶)的alpha通道透明,也就是说可以存储从完全透明到完全不透明一共256个层级的透明度(即所谓的半透明)。

 

格式最高支持色彩通道索引色编辑支持透明支持

PNG8256色支持支持布尔透明

PNG24约1600万色不支持支持8位(256阶)alpha透明

可能通过以上特性的对比大家还不能很直观的理解在实际应用中到底因该选择什么格式的图片文件,我们不妨结合上面的基本概念通过几个例子去给大家说明。

 

2、实际应用

什么时候应该使用PNG

示例1

下图是淘宝网最常见的一个图片即“立刻购买”按钮,这里我尝试用JPG和PNG8格式分别进行保存,可以看到保存的结果有两个值得注意的地方:

 

1、JPG保存的文件大小是PNG保存的文件大小的2倍

2、JPG不仅文件更大并且还出现了噪点(如图中红色方框标注的)

 

 

那么是什么原因造成这样的差异呢?

 

首先我们可以看出“立刻购买”这个按钮是在photoshop中用矢量工具绘制出来的,其渐

以上是关于使用libjpeg-turboYUV转JPG的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg图片转视频,图片+音频合成视频每秒一张图

如果视频编解码器参数与“直通”不同,我无法播放转码流

ffmpeg 一张图片转视频

识别JPG图片转文字的教程

《自拍教程20》ffmpeg_音视频图像转码工具

教你如何快速将cad转jpg格式?