BPG图像库和实用程序(译)

1)快速介绍


  • 编辑Makefile以更改编译选项(默认编译选项对于Linux应该是OK的)。输入make来编译,输入make install来安装编译后的二进制文件。
  • bpgview:为了编译它,你需要安装SDL和SDL_image库。
  • Emscripten的使用:为了生成Javascript解码器,你必须安装Emscripten并在Makefile中启用它。
  • HTML演示(带有预编译的Javascript解码器)可以在HTML /index.html中找到(如果你使用Chrome并想使用file://访问它,启动Chrome时可以使用选项——allow-file-access-from-files)。
  • bgp文件格式在doc/bpg_spec.txt中指定。

2)编译和安装注意事项


2.1)Linux


  • 编辑Makefile以更改编译选项(默认编译选项应该是可以的)。输入make来编译,输入make install来安装编译后的二进制文件。

  • 使用make -j N,其中N是CPU内核的数量,以更快地编译。

  • 需要安装如下软件包:SDL-devel
    SDL_image-devel yasm。建议使用yasm version >= 1.3.0来加快编译速度。

  • 仅支持64位target,因为x265需要它的位深度> 8。

2.2) Windows


  • 仅支持Linux下的交叉编译。

  • 需要安装如下软件包:mingw64-gcc mingw64-libpng mingw64-libjpeg-turbo mingw64-SDL mingw64-SDL_image yasm。建议使用yasm version >= 1.3.0来加快编译速度。

  • 仅支持64位target,因为x265需要它的位深度> 8。

3) bgp编码器


bgp命令行编码器是bpgenc。它以JPEG或PNG图像作为输入。

  • 速度:默认情况下bpgenc使用x265。你可以编译慢得多但更有效的JCTVC编码器,并使用-e JCTVC选项选择它。对于x265,您可以使用-m选项选择编码速度(1 =快,但图像更大,9 =慢,但图像更小)。

  • 位深度:默认为8位。你可以将其增加到10 (- b10选项)来略微增加压缩率。对于web发布来说,这通常不是一个好主意,因为Javascript解码器使用更多的内存。编译后的x265编码器支持8、10和12位深度。通过启用Makefile定义:USE_JCTVC_HIGH_BIT_DEPTH,可以将较慢的JCTVC编码器编译为支持更高的位深度(最多14)。

  • 通过HEVC无损功能,支持无损压缩。在这种情况下使用PNG输入,如果是JPEG输入,压缩与JPEG YCbCr数据相关的是无损的,而不是RGB数据。在任何情况下,位深度应该与你的图片相匹配,否则文件大小会增加很多。缺省情况下,无损模式将位深度设置为8位。首选的颜色空间设置为“rgb”。
    注:

  • 无损模式经过的测试比有损模式少,但它通常在图片上的效果比PNG更好。

  • JCTVC编码器比无损压缩的x265编码器提供更小的图像。

  • x265和JCTVC编码器对量化器参数(-q选项)的解释略有不同。

  • 颜色空间和色度格式:

*对于JPEG输入,输入图像的颜色空间不会被修改(它是YCbCr, RGB, YCbCrK或CMYK)。根据首选的色度格式(-f选项)对色度进行二次采样。

*对于PNG输入,输入图像被转换为首选的颜色空间(-c选项)。然后根据首选的色度格式对其色度进行次采样。

*灰度图像保持不变。

  • 预乘alpha:默认情况下,bpgenc使用非预乘alpha来保留颜色组件。然而,预乘alpha (-premul选项)通常以损失颜色分量为代价来获得更好的压缩效果。
    如果图像没有编辑,这种丢失不是问题。

  • 动画:使用-a选项,动画可以从PNG或JPEG图像序列中编码,索引从1或0。
    例如:

    ./bpgenc -a anim%2d.png -fps 25 -loop 0 -o anim.bpg

从anim01.png、anim02.png等生成动画。
帧速率用-fps指定,循环次数用-loop指定(0 =无限)。
如果每个图像需要不同的延迟,如某些
动画gif文件,文本文件可以用-delayfile选项指定。
每个图像包含一个数字,表示其持续时间
厘秒。
所有持续时间都被舍入为1/fps的倍数,因此
设置一致的帧速率很重要。

必要的帧和延迟文件可以使用ImageMagick工具从gif动画中生成:
convert -coalesce anim.gif anim%d.png

identify -format “%T\n” anim.gif > anim.txt
为了减小文件大小,可以选择帧速率,使大多数帧的帧周期为1(因此,如果anims .txt只包含5厘秒的帧持续时间,那么选择20帧/s的帧速率)。

因为gif使用调色板颜色和1位透明度,所以最好从原始素材(例如PNG文件)开始,以获得最好的质量。

不支持动画的bgp解码器只显示第一帧。

  • 缺省情况下,bpgenc不复制元数据。你可以使用-keepmetadata选项复制它们。对于JPEG输入,复制EXIF、ICCP和XMP。对于PNG输入,复制ICCP。

  • 客观比较:x265为SSIM默认调整。JCTVC编码器只针对PSNR进行调整,而不是SSIM,因此在与其他格式进行客观比较时,您应该使用PSNR。

4) bgp解码器


bgp命令行解码器是bpgdec。它输出PNG或PPM图像。使用PPM输出以获得最快的速度。

  • 使用-i选项,您可以获得关于bgp图像的信息(并且不输出解码图像)。

  • -b选项选择PNG输出的比特深度(8或16)。它与内部的bgp钻头深度无关。

5) BPG viewer


BPG图像查看器使用SDL库来显示BPG图像和SDL_image库支持的其他图像格式。通过不带参数地启动bpgview来显示可用的键。bpgview支持bgp动画。

6) bgp解码库


BPG图像可以在任何带有libbpg库的程序中解码。

该API还不稳定,因此只提供了一个静态库。

目前没有类似的编码库,因此您应该调用bpgenc实用程序。

7) Javascript解码器


以下是可用的Javascript解码器,按大小排序。
> 8 bits animations
bpgdec8.js no no
bpgdec.js yes no
bpgdec8a.js no yes

8位纯解码器稍微快一些,消耗的内存更少(默认情况下是16 MB,而不是32 MB,如果你想处理更大的图像,可以在Makefile中更改内存配置)。

Javascript解码器将所有标签替换为具有。bgp扩展名为标签的源,并将bgp图像解码为该标签。支持样式表(保留idclass属性)。widthheight属性仅支持像素单位。

图像数据是通过XMLHttpRequest对象下载的。
因此,除非使用跨域资源共享,否则bgp图像和bgp Javascript解码器必须在同一个域中。

在显示动画时,所有的帧都存储在内存中,因此应该避免像gif那样包含大量帧和大分辨率的动画。

asm.js提供了一个有趣的速度提升,所以我们希望更多的浏览器支持这个Javascript子集。

8) FFmpeg修改


  • 完全支持chroma_format_idc = 0(单色模式)。

  • 修复了RDPCM支持(帧内预测)。

  • 减少SAO循环过滤器的内存使用。

  • 动态生成IDCT系数,减少代码量。

  • 增加了一个“动态位深度”模式,支持从8到14的所有位深度,没有代码重复,但解码速度较慢。

  • 增加了一个修改过的SPS头,以减少bgp解码器的大小(另一种解决方案是根据bgp头生成标准的VPS和SPS头)。

  • 增加了只保留HEVC帧内代码并抑制所有无关NAL单元的解析的定义。

  • 从除HEVC和必要的支持代码之外的所有编解码器中剥离FFmpeg。

9) x265修改


  • 支持单色格式(可能缺少bgp不使用的部分)。

  • 支持静态构建。

10)许可


  • libbpg和bpgdec是在LGPL许可下发布的(FFmpeg部分是在LGPL许可下发布的,bgp特定部分是在BSD许可下发布的)。

  • bpgenc基于GPL version 2许可证发布。BPG专用代码是在BSD许可证下发布的。JCTVC代码是根据BSD许可证发布的。x265代码是根据GPL发布的
    版本2许可证。

  • BPG依赖HEVC压缩技术,该技术在某些国家可能受到专利保护。大多数设备已经包含或将包含硬件HEVC支持,所以我们建议如果专利使用它是一个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955202.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么在iPhone手机上使用便签进行记录?

宝子们,在这个快节奏的时代,灵感的火花总是一闪而过,待办事项也常常让人应接不暇。好在咱们的 iPhone手机便签超给力,能满足各种记录需求!今天就来给大家分享一下,如何在 iPhone 手机上巧用便签&#xff0c…

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码,对接自己的支付,虚拟主机也能搭建,小白式建站系统,基于宝塔面板搭建的建站系统,功能丰富,多款模板,每日更新 上传源码到服务器,浏览器访问…

【C++】拷贝构造函数与运算符重载

写在前面 拷贝构造函数、赋值运算符重载、取地址运算符都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 在程序编写中,我们也经常使用拷贝的方式来获取到对应的值,例如整形变量拷贝int a 0; i…

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 三、信号量 信号量理论 信号量接口 一、System V通信 System V IPC(inter-process communication),是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 …

2025.1.15——七、cookie注入

题目来源:ctfhub技能树 目录 一、打开靶机,整理已知信息 二、解题步骤 step 1:按F12查看cookie信息,见上 step 2:bp抓包修改cookie信息,确认注入类型 step 3:查看字段数 step 4&#xff…

【简博士统计学习方法】第2章:3. 感知机——学习算法之原始形式:算法解说

3. 感知机——学习算法之原始形式:算法解说 3.1 学习问题 给定训练数据集: T { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ , ( x N , y N ) } T\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right) \cdots,\left(x_{N}, y_{N}\right)\right\} T{(x…

【Flink系列】10. Flink SQL

10. Flink SQL Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理&#xff08…

web漏洞扫描有什么作用?web漏洞扫描原理

Web漏洞扫描在网络安全领域中扮演着至关重要的角色,web漏洞扫描有什么作用?Web漏洞扫描能够自动化地检测Web应用中的潜在安全漏洞,包括但不限于SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、文…

【Idea启动项目报错NegativeArraySizeException】

项目场景: Idea启动项目报错(打包不报错),项目在服务器部署运行没有问题,尝试了重启idea、重启电脑、maven clean/install 都不行 maven-resources-production:sample: java.lang.NegativeArraySizeException: -5833…

小程序组件 —— 31 事件系统 - 事件绑定和事件对象

小程序中绑定事件和网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代替,绑定事件的方式有两种&…

sparkSQL练习

1.前期准备 (1)建议先把这两篇文章都看一下吧,然后把这个项目也搞下来 (2)看看这个任务 (3)score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…

GIFT ICA 下载记录

1.帮助文档 Group ICA/IVA Of fMRI Toolbox;【GIFT介绍】 Group ICA of fMRI Toolbox (GIFT) Walk Through;【流程介绍】 GIFT v1.3c Functions Srinivas Rachakonda, Eric Egolf and Vince Calhoun【流程解释】 2.下载记录 从官网下载程序包&#xff0…

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起,还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

02JavaWeb——JavaScript-Vue(项目实战)

一、JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习 JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过JS/js效果演示提供资料进行效果演…

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…

大模型高并发部署方案探究

版本 内容 姓名 时间 V1.0 新建 xx 2025-01-16 声明:只是进行探究,后续真正实践后,会更新新的内容 前置条件:70B的模型,并发要求200 性能测试参考链接 Benchmarking LLM Inference Backends :表明一台A100(8…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日,以“构建‘中试’生态,赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节,成都元来云志科技有限…

pytest-instafail:让测试失败信息即时反馈

pytest-instafail:让测试失败信息即时反馈 前言一、简介二、优势三、安装与使用3.1 未安装时运行情况3.2 安装3.3 已安装时运行情况3.3 pytest.ini 配置选项 四、对比 总结 前言 当测试用例数量庞大时,定位测试失败的原因往往耗时费力。此时,…

低代码平台:技术复杂性的系统简化

在传统开发模式下,应用构建需要经历需求分析、代码开发、测试部署等多环节,流程繁琐且耗时,往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程,使开发者能够在较短时间内实现复杂的应用功能&#xf…

精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】

Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址:官方论文地址 代码地址:官方代码地址 摘要——边界框回归在目标检…