博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 常用图片格式判断 (Swift)
阅读量:6788 次
发布时间:2019-06-26

本文共 1899 字,大约阅读时间需要 6 分钟。

常用的图片格式有一下几种。

  • PNG
  • JPEG
  • GIF
  • WebP 是 Google 制造的一个图片格式,针对网络上快速传输就行了优化
  • TIFF/TIF 在数字影响、遥感、医学等领域中得到了广泛的应用。TIFF文件的后缀是.tif或者.tiff
  • HEIC iOS11 后,苹果拍照图片的默认格式
  • HEIF 用于存储动态图像

那么,怎么去判断。通常图片格式都会存储图片的 Hex Signature 中(十六进制签名) 相信地址可以参考:

JPGE 二进制数据前两个字节数据为
Hex SignatureFF D8复制代码
PNG
Hex Signature89 50 4E 47 0D 0A 1A 0A复制代码
GIF
Hex Signature47 49 46 38 37 61 or47 49 46 38 39 61复制代码
TIFF
Hex Signature49 20 49 or49 49 2A 00 or4D 4D 00 2B or4D 4D 00 2A复制代码
HEIC
Hex Signature00复制代码

HEIF
Hex Signature00复制代码

网上很多都是复制过来的,都知道代码是怎样的。但是不知道为啥具体需要判断如 heic, heix, mif1 等这些信息。后来在这里找到。

WEBP
Hex Signature52复制代码

判断 Webp 为什么是截取 0-12 的长度?转换成 ASCII 之后判断的依据?

在 Google 官方介绍中找到了此图。说明的是:头文件的大小是 12Bytes

WEBP的 header 中写明了
ASCII
RIFF 或者
WEBP Google Developer:

明白了原理之后,就是代码咯!

enum ImageFormat {    case Unknow    case JPEG    case PNG    case GIF    case TIFF    case WebP    case HEIC    case HEIF}extension Data {    func getImageFormat() -> ImageFormat  {        var buffer = [UInt8](repeating: 0, count: 1)        self.copyBytes(to: &buffer, count: 1)                switch buffer {        case [0xFF]: return .JPEG        case [0x89]: return .PNG        case [0x47]: return .GIF        case [0x49],[0x4D]: return .TIFF        case [0x52] where self.count >= 12:            if let str = String(data: self[0...11], encoding: .ascii), str.hasPrefix("RIFF"), str.hasSuffix("WEBP") {                return .WebP            }        case [0x00] where self.count >= 12:            if let str = String(data: self[8...11], encoding: .ascii) {                let HEICBitMaps = Set(["heic", "heis", "heix", "hevc", "hevx"])                if HEICBitMaps.contains(str) {                    return .HEIC                }                let HEIFBitMaps = Set(["mif1", "msf1"])                if HEIFBitMaps.contains(str) {                    return .HEIF                }            }        default: break;        }        return .Unknow    }}复制代码

转载地址:http://uycgo.baihongyu.com/

你可能感兴趣的文章
Broadcom 802.11n 网络适配器 看看你的PCI id 对照一下 没戏的话就别玩了
查看>>
fatfree-f3小型php框架(一)
查看>>
[Python]使用中的一些小方法集合
查看>>
android模块化app开发-3远程动态更新插件
查看>>
Java获取客户端真实IP地址的两种方法
查看>>
DRUID数据库连接池配置详解
查看>>
网络检测除了心跳包必须带有超时机制
查看>>
系统架构领域的一些学习材料
查看>>
见识Erlang网络IO能力
查看>>
数字按照不同格式转换成字符串
查看>>
看了一下seajs的心得
查看>>
web工程中如何组织静态化资源
查看>>
CDO数据结构基础(1)
查看>>
OpenCV 2.4+ C++ SVM文字识别
查看>>
Android 两个Activity之间信息的交互
查看>>
mysql的sql-mode
查看>>
Jquery 验证form表单是否修改
查看>>
NoSQL之Redis探讨
查看>>
spring容器初始化 bean 和销毁 的三种定义方式
查看>>
泛型中<? extends T>和<? super T> 差别
查看>>