当前位置: 首页 > news >正文

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支持,所以我们建议如果专利使用它是一个问题。

相关文章:

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

1)快速介绍 编辑Makefile以更改编译选项(默认编译选项对于Linux应该是OK的)。输入make来编译,输入make install来安装编译后的二进制文件。bpgview:为了编译它,你需要安装SDL和SDL_image库。Emscripten的使用&#xff…...

简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程

以下是一个常见的业务过程示例,展示了从客户端调用接口,再到调用中间件(Nacos、Redis、Kafka、Feign)和数据库的过程: 假设我们有一个电商系统,客户端要查询某个商品的详细信息,这个商品信息可…...

01.02、判定是否互为字符重排

01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 在这道题中,我们的任务是判断两个字符串 s1 和 s2 是…...

什么是.NET中的反射,它有哪些应用场景

反射是.NET框架提供的一种强大的机制,它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景: 一、反射的定义 在.NET中,所有类型的信息(包括类、结构、委托、接口、枚举等以及它们的成员信息…...

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...

解决 chls.pro/ssl 无法进入问题

使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查,ip地址、证书,ssl设置等等都正常,就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一,基于 ECS(实体组件系统)架构。 特点: 🚀 高性能 ECS 系统📦 热重载支持🎨 现代渲染器🔊 内置音频系…...

hadoop3.3和hive4.0安装——单节点

hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0,因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本(配置好环境变量) hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...

centos安装golang

1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…...

博图 linucx vmware

电脑与 PLC 的连接 博图装在虚拟机里,PLC 通过网线与电脑连接 可以是使用网线直接连接,也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式,但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例,进入编辑/虚拟网…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件,万事开头难🤣🤣🤣 原计划是分享离线应用与数据资源缓存的应用实践,结果发现这一技术已被web标准废弃 曾经做过一个PC应用,业务需求要求应用具备容灾…...

Unity 语音转文字 Vosk 离线库

市场有很多语音库,这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的,(确保麦克风正常,且索引正确)分大…...

VSCode连接Github的重重困难及解决方案!

一、背景: 我首先在github创建了一个新的项目,并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时,错误出现了 二、报错及解决方案: 1.解决方案: 需要在git上配置用…...

《AI赋能鸿蒙Next,打造极致沉浸感游戏》

在游戏开发领域,鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇,使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中,非…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下: form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

<C++学习>C++ std 多线程教程

C std 多线程教程 理解多线程的概念 多线程是一种并发编程技术,它允许程序同时运行多个任务。每个线程共享同一进程的资源(如内存),但拥有独立的执行路径。多线程编程在现代 C 中变得更加便捷和安全,标准库提供了强大…...

用 Python 自动化处理日常任务

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名

《深入浅出HTTPS​​​​​​​​​​》读书笔记(28):DSA数字签名 对称加密算法有很多算法,标准算法是RSA机密算法,数字签名技术也有一个标准DSS(Digital Signature Standard),其标准…...

type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)

1.图标类型 <uni-icon>组件中&#xff0c;type可以用来指定图标的不同样式。 <uni-icons type"circle" size"30" color"#007aff"></uni-icons> //表示圆形 <uni-icons type"square" size"30" co…...

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、捷联惯导更新1、insinit():初始化 ins 结构体2、ethupdate():地球自转角速度和牵连角速度更新3、insupdate():捷联惯导更新1. 速度更新2. 位置更新3.…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...