HEIF & HEVC 你知道多少?

2023-11-12

点击上方“iOS开发”,选择“置顶公众号”

关键时刻,第一时间送达!


在升级 iOS 11 之后,iPhone 7 及更新的设备内的照片存储将不再用 JPEG 了,而采用了一种新的图片格式 HEIF(发音同 heef),在 iOS 中对应的文件后缀为 .heic ,其编码用的是 HEVC(这个发不了音,哈哈哈)格式,又称 H.265 (这个就很熟悉了 H.264 的下一代),同时视频也用 HEVC 作为编码器,对应的文件后缀还是 .mov 。


这里要注意他们俩的关系, HEIF 是图片格式,而 HEVC 是编码格式(类似 H.264,VP8),HEIF 是图片容器(类似于视频的 mkv,mp4 后缀),而用 HEVC 进行编码的 HEIF 图片就是后缀为 .heic 的图片,也是苹果主要使用的格式。


这两个都是很新的标准,分别在 2015 和 2013 年才被 ISO 批准。这篇文章主要介绍一下 HEIF 格式和与其他图片格式相比的优劣。


发展史如下:


screenshot


什么是 HEIF?


screenshot


这张图是 WWDC Session 511 的形容 Heif 的一句英文诗,JPEG 很大,但是 HEIF 和小。


HEIF 全称 High Efficiency Image Format (HEIF)。是由 Moving Picture Experts Group 制定的,存储图片和图片序列的格式。


相关的介绍位置这边可以看到 nokiatech.github.io/heif/ ,对的,你没有看错,是 Nokia 的技术人员们制定的。相比 JPEG ,PNG 等传统的图片格式来说, HEIF 可算是相当年轻了,但是这种格式相比 JPEG 等有很多的优点。


压缩比高,在相同的图片质量情况下,平比 JPEG 高两倍。


能增加如图片深度信息,透明通道等辅助图片。(苹果正是通过这个就能实现动态的调整图片的景深)。


depth


支持存放多张图片,类似相册和集合。(实现多重曝光的效果)


screenshot


  • 支持多张图片实现 GIF 和 livePhoto 的动画效果。

  • 无类似 JPEG 的最大像素限制。

  • 支持透明像素。

  • 分块加载机制。

  • 支持缩略图。


在这个 Nokia 网站上可以看到相关的例子。


文件组成


在视频文件中,容器和编码是独立开的,比如 mp4,mkv 等格式是容器,而 H.264,VP8 等是编码。但是图像文件中,像 JPEG 就是混合在一起的(所以它不好用啊,哈哈哈哈),HEIF 就把容器和编码分开了,有用来存放单个或者多个图像的容器。


所以基于不同的编码器,会有不同的文件后缀。



Apple 设备中默认使用的都是 HEVC 的编码的 HEIF 格式。


在 Apple 所编码的 HEIF 的文件组成大致如下图,其 mdat - Media Data 中存放的是 exif 信息,缩略图(320*240),和 HEVC 编码后的图片:


screenshot


HEIF 底层是默认 tiled,就是片状的有 512x512 个,由一个个小的图块,组成一张大图,这一特性有如下的优点:


  • 加速解码

  • 缩放加快(不用加载整张图片)

  • 裁剪加快


HeifTile 和 SystemTile (CATiledLayer 等系统所提供的分块加载)是不一样的,但是两者结合会有很大的提升,所以在加载和处理特大图片时,性能有大幅度的提升。


HEIF 所采用的熵编码也和 JPEG 不一样,JPEG 是用的霍夫曼编码(Huffman),而 HEIF 使用的是基于上下文的自适应二进制算术编码(CABAC),编码的是数据量更小且更快。


兼容性


每当一个新的技术推进至工业化,兼容性无疑是最重要的考量点。像 HEIF 这样的图片格式,并不像 JPEG / PNG 等已经被广泛应用和适配了,估计在 Apple 推出之前,大部分开发者和我一样应该都是不知道的。目前工业化的体系内,对 HEIF 几乎是不兼容,Windows 上无法打开 HEIF 文件,10.13 前的 macOS 也无法打开。苹果在推行这一技术的时候,在内部也是做了很多兼容工作的。


对一般用户


一般情况下,用户是对这个格式无感知的,因为只有在新款支持硬解码的 iOS 手机内部是以 heif & hevc 格式来存储照片和视频的,而在用户通过 Airdrop 或者数据线传送到电脑上的时候,对不兼容的设备会自动转换到 JPEG 的格式。所以也不会影响你使用微信,微博等软件。


不过在苹果内部的 app 中,基本都已经用上了这一技术,如照片,FaceTime 等应用。意味着以后同等储存空间能存放更多的照片和视频,同时 FaceTime 也能节省更多了流量,相同网络情况下,FaceTime 也会更加清晰。


通过在 设置 -> 照片 选项中可以设置传到 MAC 或者 PC 上时保持 HEIF 格式。


screenshot


支持的设备


  • HEIF 图片:

编码:


  • 硬件:A10 及以上芯片 iOS 设备。即只有 iPhone7 及以上是支持 HEIF 的(有双摄像头,才带有深度信息)。

  • 软件:iOS11,运行 macOS 系统的 Mac 设备。


  • 解码:


  • 硬件:A9 及以上芯片 iOS 设备(iPhone6s),配备 6 代及以上 Inter Core 处理(Skylake)。


  • 软件:iOS11 和 macOS 支持软解码,但是 iOS11 锁版本代表最低只支持到 5s 


  • HECV 视频:

视频分为 8 位 / 10 位 两种模式。

基本和图片编解码保持一致,唯一有区别的是 10 位硬解码要求是 7 代 Intel 处理器。


总结一下,就是升到 iOS 11 之后,你的设备就能解析新格式的图片和视频,软硬解码的区别就是,硬解码会更快并更省电


对开发者


上层框架 PhotoKit


对用户的几乎无感知切换的前提,肯定是上层 API 没有变化,调整的是最底层的 API,所以一般开发者使用上层的框架时,如 PhotoKIt 是不受影响的,不同格式的图片都抽象为了同一个对象。而且对图片增加滤镜和视频的调整修改,最后都会渲染为 JPEG 和 H.264。在这一级别的 API 是接触不到图片文件格式转换所带来的变化的。


下层框架 Image I/O


Image I/O 中可以直接读写 .heic 文件。

iOS 11 中 Image I/O 能够直接读取 heif 的文件,包括读取 exif,xmp 等信息。


let inputURL = URL(fileURLWithPath:Bundle.main.resourcePath! + "/IMG_0513.HEIC")

let source = CGImageSourceCreateWithURL(inputURL as CFURL, nil)

let image = CGImageSourceCreateImageAtIndex(source!, 0, nil)


let options = [kCGImageSourceCreateThumbnailFromImageIfAbsent as String: true, kCGImageSourceThumbnailMaxPixelSize as String: 320] as [String: Any]

let thumb = CGImageSourceCreateThumbnailAtIndex(source!, 0, options as CFDictionary)


guard let cImage = image else {

            print("not support heic")

            return;

}


当然也可以选择把 CGImage 写入到 HEIC 格式,虽然这样可以节约更多的存储空间,实际使用的时候还是要注意转换操作。


let url = URL(fileURLWithPath: "/tmp/output.heic")

guard let destination = CGImageDestinationCreateWithURL(url as CFURL,AVFileType.heic as CFString, 1, nil) 

    else{

     fatalError("unable to create CGImageDestination")

}

CGImageDestinationAddImage(imageDestination, image, nil) 

CGImageDestinationFinalize(imageDestination)


Apple 提供的很多 API ,供开发者检测设备是否支持新的格式。提供了两种推荐的工作场景事例。


  • 社交网络

在社交软件中,涉及到图片分享之类的内容,是无法确定接受者是否能支持新的格式的, Apple 的策略是建议都进行转换到 JPEG 的操作,比如发送邮件,或者通过 extension 分享的时候,传入其他 app 中的时候,都已经进行了转换了。


  • p2p 场景

在该场景中,设备和设备间的直接连接,首先把接受者的支持格式告知发送者,然后发送者根据兼容的情况,选择 HEIF 或者 JPEG。比如 AirDrop 。


同时诸如 SDWebImage 目前也正在做对 heif 的兼容。


跨平台


大部分的播放器已经支持了 HEVC 即 H.265 的编码器,但是针对 HEIF 的图片兼容性还是相对较差的。

目前有的是 Nokia 提供了一个 C++ 的读写库,通过该库,支持把 HEIF 的图片的解码到 HEVC 的编码数据。


Android 兼容性:


依赖 Nokia 的库,目前只能通过 CPU 软解。


据说 LG 正在研发支持硬解的手机。(raddit)


网页兼容性:


Nokia 提供 JS 库。


Windows 兼容性:


目前也没有能直接打开 HEIF 文件的应用。


对比


常常拿来与 HEVC 来做对比的是 VP9。两者的性能相近,但是 VP9 是开源的,而 HEVC 是需要专利费的( $2 每设备)。

目前暂时没有通过 VP9 进行编码的图片,所以这里主要对比的是 webp 就是通过 VP8 进行编码的图片。

webp

WebP目前支持桌面上的Chrome和Opera浏览器,手机支持仅限于原生的Android浏览器、Android系统上的Chrome浏览器、Opera Mini浏览器。


  • WebP 有损支持

Google Chrome (desktop) 17+

Google Chrome for Android version 25+

Opera 11.10+

Native web browser, Android 4.0+ (ICS)

  • WebP 有损 / 无损 / 透明支持

Google Chrome (desktop) 23+

Google Chrome for Android version 25+

Opera 12.10+

Native web browser, Android 4.2+ (JB-MR1)

Pale Moon 26+

  • WebP 动画支持

Google Chrome (desktop and Android) 32+

Opera 19+


下面是几个关键技术点的对比,可见 HEIF 功能是最强大的。



压缩效率


下面的数据均是官方提出:


Webp 同等质量下,比 JPEG 图像小 25-34%。


JPEG 平均需要比 HEVC 多 139% 的比特率,意味着同等质量下,JPEG 的大小是 HEVC 的 2.39 倍!


把两个的参考标准统一一下:


Webp 比 JPEG 小 25-34%

HEVC 比 JPEG 小 58%


但是在我自己的本地的测试中,测试了五组图片。webp 以 80 的质量进行压缩,hevc 以 crf 18 (视觉无损)压缩,同时增加一个 320x240 的缩略图。


自己进行 HEIF 转码的流程是,将图片通过 ffmpeg 编码到 H.265,再通过 Nokia 的库转成 HEIC 文件(Heif)。


//生成主图像编码

ffmpeg -i $1 -crf 18 -preset slower -pix_fmt yuv420p -f hevc bitstream.265 

//生成缩略图编码

ffmpeg -i $1 -vf scale=320:240 -crf 28 -preset slower -pix_fmt yuv420p -f hevc bitstream.thumb.265

//调用 Nokia 的工具

./writerapp config.json



除了一组特大图的表现不一样外,其他几组图片相比, heif 确实比 webp 压缩效率高 10-20%。


毕竟和 HEVC 对标的技术应该是 VP9,所以 heif 能够领先也是情理之中。


解码的消耗测试


主要测试设备是 iPhone 6s Plus 系统 iOS 11,用的解码方法 webp 为 Google 提供的库,hevc 和 jpeg 用的是 CGImageSource 来解码。

测试用图片还是之前的五组图片,同时对 JPEG 进行了一些压缩,测试了 5 组平均值(去一个最高,去一个最低),估计加载的时候存在缓存,所以第一次读图片数据的时候耗时较大。


第一组用第一张 7.7 mb 的 jpeg 压缩后大小 1.1mb

jpeg 7.43 2.77 1.46 1.9 2.14 2.00 【占用率 6 %】

hevc 41.0 3.45 3.35 2.62 2.92 2.66 【占用率 6 %】

webp 216.6 216.8 217.5 261.9 195.2 【占用率 21 %】



第二组用第三张 1.8 mb 的 tff,转换成 jpeg 之后大小为 815 KB。

hevc 58.4 3.1 2.8 1.13 2.65 2.82 2.02 【 2% 】

jpeg 65.3 2.67 2.76 2.73 2.69 2.87 1.34 【 2% 】

webp 130.2 110.9 117.5 114.8 120.9 112.8 124.84 【 12% 】



第三组用的最后一张 243KB PNG ,转换成 JPEG 之后大小为 43 KB。


hevc 47 3.24 2.7 3.21 2.63 1.74 【 1 %】

jpeg 16 6.70 6.97 4.46 7.2 6.76 7.08 【 1% 】

webp 20.7 20.2 12.5 22.0 19.3 19.4 【 2 % 】



测试结果由于硬解码的支持,jpeg 和 hevc 解码速度和 CPU 占用率都比 webp 快和小很多,jpeg 和 hevc 不相伯仲,可见苹果内部对其优化也相当到位,才把它放到 iOS 11 中。


总结


相比 JPEG 来比很强大,毕竟是下一代技术,但是兼容性可想而知,在“最大效率”和“最大兼容”两者中间还是要根据使用场景进行权衡,目前的优势也只有最新的 iPhone 能体验到,但不久的将来可能所有的手机都去支持照片深度,动态照片,更广的色域等。HEVC 也许和推行 H.264 一样,逐渐成为了工业界的标准,但又可能和推行 acc 的处境一样,只是成为了苹果的标准而已,终究还是要看市场的反应了。



  • 作者:刘小蛮

  • 链接:https://juejin.im/post/59ddc13ff265da432319f438

  • iOS开发整理发布,转载请联系作者授权

【点击成为安卓大神】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HEIF & HEVC 你知道多少? 的相关文章

  • Android MD5加密算法

    Android MD5加密算与J2SE平台一模一样 因为Android 平台支持 java security MessageDigest这个包 实际上与J2SE平台一模一样 算法签名 String getMD5 String val thr
  • IDEA连接MySQL

    今天使用IDEA连接MySQL时 遇到了很多问题 寻找了一个多小时终于把解决了 写篇博客记录记录 帮后来人节约时间 首先是参照其他帖子不断寻找Database视图 找了小半天才发现这个在IDEA中社区版是没有的 需要下载IDEA 的Ulti
  • 【allegro 17.4软件操作保姆级教程一】软件操作环境设置

    文中截图为16 6的软件截图 16 6与17 4的操作逻辑基本相同 大家无需担心 后续文章会使用17 4的截图 1操作环境准备1 1单位设置 可以将全局单位设置为mil 精度改为2位 也可以设置为mm 这时精度改为4位 这个根据习惯而定 操
  • PyTorch学习笔记(21) ——损失函数

    0 前言 本博客内容翻译自纽约大学数据科学中心在2020发布的 Deep Learning 课程的Activation Functions and Loss Functions 部分 废话不多说 下面直接开始吧 1 损失函数 本文是PyTo
  • 在Unity开发中使用 Rider

    Unity开发中使用Rider 环境 Windows Unity 2017 JetBrains Rider 2018 3 4 作为Windows和Visual Studio的拥趸 我是多么推崇Visual Studio 开发Unity使用
  • JS和Java实现链表类的基本功能

    综合网上实例 参考 http www 2cto com kf 201204 126773 html JavaScript实现参考 http m blog csdn net blog caiwenfeng for 23 8496029 Jav
  • 【C++入门到精通】C++入门 —— deque(STL)

    阅读导航 前言 一 deque简介 1 概念 2 特点 二 deque使用 1 基本操作 增 删 查 改 2 底层结构 三 deque的缺陷 四 为什么选择deque作为stack和queue的底层默认容器 总结 温馨提示 前言 文章绑定了
  • STL之序列式容器

    STL之序列式容器 STL容器即是将运用最广的一些数据结构实现出来 根据其在容器的排列特性 将其分为序列式容器和关联是容器 本文主要记录序列式容器 以及其常用的功能函数 1 vector vector和数组一样维护了一个连续的线性空间 ve
  • 第十二届蓝桥杯省赛 Java B组 试题 G: 最少砝码

    一 问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意小于等于 N 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入包含一个正整数 N 输出一个整数代表答案 7 3 二 解析 用贪心的
  • CentOS7 linux怎么安装xfce 桌面

    如何安装xfce桌面 首先 yum update yum grouplist yum install epel release y 安装第三方源 yum groupinstall X window system 安装X window yum
  • Niginx的介绍及安装

    Niginx的介绍及安装 前言 一 Nginx是什么 二 Nginx安装使用步骤 前言 随着一个应用程序的访问量越来越庞大 对数据库的访问量也随之增强 而单个服务器的承受能力是有限的 这时就需要增加多个服务器 但是我们如何保证所有访问分摊到
  • 门控时钟及其思考

    这篇文章学习所谓的门控时钟 门控时钟有两种 与门控时钟和或门控时钟 1 与门控时钟 门控时钟结构 低电平选通的锁存器 一个与门 保证了经过与门的使能信号不会在时钟高电平的时候翻转 从原理上消除了由于使能信号的不确定性导致门控时钟产生毛刺的情
  • 第一章初识R语言

    1 1 R扩展包的安装与载入 1 在线安装 例如 需要安装 class 这个扩展包 则输入命令install package class 执行即可 也可以同时安装多个包 例如 需同时安装 class 和 cluster 两个包 则输入命令i
  • shader从入门到精通——(二)三大主流编程语言

    shader language 1 基于OpenGL的OpenGL Shading Language 简称GLSL 2 基于DirectX的High Level Shading Language 简称HLSL 3 基于NVIDIA公司的C
  • OCX控件在web页面不能加载的问题

    1 问题描述 写了个OCX 在本地静态html文件里加载 双击用IE打开 能够正常加载OCX控件 调用其方法也正常 把测试的html文件放入apache目录 通过IE 敲入localhost访问也正常 但是部署到服务器上 通过客户端PC访问
  • SQL中去重的三种方式

    SQL去重是数据分析工作中比较常见的一个场景 在 MySQL 中通常是使用 distinct 或 group by子句 但在支持窗口函数的 sql 如Hive SQL Oracle等等 中还可以使用 row number 窗口函数进行去重
  • 五十七、Fluent UDF自定义材料物性参数

    1 材料属性的设置 有两种方式可以自定义材料的属性参数 第一种材料下拉框选择 第二种UDF自定义函数 我们这次主要介绍第二种方式 通过UDF的方式自定义材料属性 之前有两篇文章介绍过UDF的基础和UDF DEFINE PROFILE宏 自定
  • 【Educoder python 作业答案】国防科技大学《大学计算机基础》冯·诺依曼体系结构模拟机 TOY2

    Educoder python 作业答案 国防科技大学 大学计算机基础 冯 诺依曼体系结构模拟机 TOY2 第1关 TOY2 计算机建模与模拟 第2关 外置函数numpy 科学计算工具 第3关 函数正确调用 得到想要的结果 第4关 函数与函
  • MQTT 控制报文 - PUBLISH发布消息,PUBACK,PUBREC,PUBREL,PUBCOMP - 第6章

    目录 6 1 PUBLISH 发布消息 6 1 1 固定报头 6 1 1 1 DUP重发标志 6 1 1 2 Qos服务质量等级 6 1 1 3 RETAIN保留标志 6 1 2 可变报头 6 1 3 有效载荷 6 2 PUBACK 发布确
  • 使用虚拟机遇到的一次问题——虚拟机ping不通网关

    问题 主机可以ping到虚拟机 外网 虚拟机可以ping到圆环地址 可以ping到同网段下其他虚拟机 虚拟机ping不到网关 ping不到外网 检查了网络编辑器的设置 没有问题 主机ipconfig发现问题 默认网关没了 进入属性编辑器添加

随机推荐

  • JS事件高级

    1 注册事件 绑定事件 1 1 注册事件概述 给元素添加事件 称为注册事件或者绑定事件 注册事件有两种方式 传统方式和方法监听注册方式 传统注册事件 利用on开头的事件onclick
  • JAVA接收JSON中的数组

    入参数据示例 respCode 0000 respMsg 请求成功 bizSeqNo 22022120001184432418054888526616 transTime 20220221180548 success true tokenA
  • 思科视频会议系统+服务器,Cisco思科MCU5310视频会议系统服务器

    业界 的高清MCU Cisco 5300系列MCU Cisco 5300系列系列MCU 为目前业界 的一款全高清MCU产品 具备高度稳定性 可管理性 同时具有灵活的容量端口数 能充分满足用户需求 一 的稳定性 灵活的端口容量 Cisco53
  • 华为OD机试 Python 矩阵稀疏扫描

    描述 题目描述 一个矩阵 如果其中大部分元素都是0 我们就称它为 稀疏矩阵 稀疏矩阵在实际应用中很常见 处理这种矩阵可以大大提高计算效率 现在 你得到了一个矩阵 要求你检查哪些行和列是 稀疏 的 稀疏 的定义是 当一个行或列中的0的数量超过
  • jQuery的ajaxform()

    https blog csdn net qq 38602656 article details 78668924 https blog csdn net weixin 41355260 article details 79851651
  • Linux系统中修改Oracle数据库字符编码集

    具体操作步骤如下 su oracle sqlplus nolog connect as sysdba 查看数据库字符编码集 select userenv language from dual shutdown immediate start
  • mysql中00933错误_java.sql.SQLException: ORA-00933: SQL 命令未正确结束错误解决

    在程序运行时 程序报sql错误 nested exception is java sql SQLException ORA 00933 SQL 命令未正确结束 具体错误如下所示 调用函数异常 org springframework jdbc
  • 性价比较高的笔记本电脑推荐

    推荐一 联想小新Air14锐龙版 优点 6核处理器 Zen2架构 性能释放高达26w 高色域屏幕 支持DC调光 硬盘扩展性好 双M 2插槽 有USB C接口 支持PD充电 缺点 单USB C接口 充电时占用接口 推荐二 惠普 ZBook S
  • antDv 级联选择器(a-cascader)通过接口动态加载数据

    每次子选择器的内容都是通过将父级id传给接口获取到 最终保存到data中参数selectItem格式为 xxx xx x
  • 计算机网络与服务器

    目录 架构体系及相关知识 三层架构 四层架构 常见的应用的模式 OSI模型 分层 数据链路层 TCP IP模型 TCP和UDP都是传输层的协议 TCP三次握手 四次次分手 URL HTTP协议详解 网址URL 结构化 报文行 报文头 空行
  • (G)ZS-CMR数据划分

    G ZS CMR 即 广义 零样本跨模态检索 设置类比 广义 零样本学习 G ZSL 这里记录两种划分 不限 CMR 也可以是 image retrieval ZS CMR 参考 1 类比 ZSL 整个数据集先从 class 角度分 see
  • 【java基础】java关键字总结及详解

    Java关键字是电脑语言里事先定义的 有特别意义的标识符 有时又叫保留字 还有特别意义的变量 Java的关键字对Java的编译器有特殊的意义 他们用来表示一种数据类型 或者表示程序的结构等 关键字不能用作变量名 方法名 类名 包名和参数 一
  • “应用程序配置不正确,应用程序未能启动” 错误的解决

    转载自 http hi baidu com xunxun129 blog item 6b311ccf24f4900992457e87 html 一 问题描述 今天在虚拟机上装了XP系统 但运行一个win32 Console程序时弹出对话框
  • 【第八章 IDEA中常用快捷键】

    第八章 IDEA中常用快捷键 1 Ctrl Y 删除光标所在行的所有内容 Ctrl X也可以 2 Ctrl D 快速向下复制当前行的内容 3 Ctrl W 递进式选中代码 可以先选中光标所在的一部分代码 连续按这个快捷键会在原来的基础上继续
  • 3dsmax子菜单无法选择_超全!!3ds Max重要的快捷键指令都在这里!画图速度提高一倍...

    室内设计胶囊 每个人都在努力的学习 感觉自己有一段时间没有练习了 只是偶尔工作的时候用用 大家都在努力 那我也出一点点力量吧 有同学说3ds Max 里面的快捷键实在太多了 全部记住有些吃力 能不能整理一份重要的 常用的快捷键 这样在记忆的
  • 史上最全 Vue 前端代码风格指南

    这篇文章是在公众号JS每日一题里抄过来的 觉得有用 收藏在这里 一 命名规范 市面上常用的命名规范 camelCase 小驼峰式命名法 首字母小写 PascalCase 大驼峰式命名法 首字母大写 kebab case 短横线连接式 Sna
  • Vue3 详细教程

    文章目录 一 API 风格 1 1 选项式 API 1 2 组合式 API 二 Vue 指令 2 1 文本插值 2 2 v html 标签元素 2 3 v on 绑定事件 2 4 v show 隐藏元素 2 5 v if 消除元素 2 6
  • Error:JAVA_HOME is not set and could not be found

    解决办法 打开hadoop etc hadoop目录下的文件hadoop env sh 将语句 export JAVA HOME JAVA HOME 修改为 export JAVA HOME 你的java路径 比如我是将其修改为 expor
  • Apache服务

    Apache服务 apache与nginx服务的区别 什么是服务 服务是具备处理客户端请求能力的程序 网站服务就是可以处理http请求并回复响应报文及数据 apache相关文件 主配置文件 etc httpd conf httpd conf
  • HEIF & HEVC 你知道多少?

    点击上方 iOS开发 选择 置顶公众号 关键时刻 第一时间送达 在升级 iOS 11 之后 iPhone 7 及更新的设备内的照片存储将不再用 JPEG 了 而采用了一种新的图片格式 HEIF 发音同 heef 在 iOS 中对应的文件后缀