iOS 常用图片格式判断 (Swift)

栏目: Swift · 发布时间: 5年前

内容简介:常用的图片格式有一下几种。那么,怎么去判断。通常图片格式都会存储图片的网上很多都是复制过来的,都知道代码是怎样的。但是不知道为啥具体需要判断如

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

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

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

JPGE 二进制数据前两个字节数据为

Hex Signature
FF D8
复制代码

PNG

Hex Signature
89 50 4E 47 0D 0A 1A 0A
复制代码

GIF

Hex Signature
47 49 46 38 37 61 or
47 49 46 38 39 61
复制代码

TIFF

Hex Signature
49 20 49 or
49 49 2A 00 or
4D 4D 00 2B or
4D 4D 00 2A
复制代码

HEIC

Hex Signature
00
复制代码
iOS 常用图片格式判断 (Swift)

HEIF

Hex Signature
00
复制代码
iOS 常用图片格式判断 (Swift)

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

WEBP

Hex Signature
52
复制代码

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

iOS 常用图片格式判断 (Swift)

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

iOS 常用图片格式判断 (Swift)
WEBP的 header 中写明了 ASCIIRIFF 或者 WEBP Google Developer: developers.google.com/speed/webp/…

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

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.hasPrefix("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
    }
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5秘籍(第2版)

HTML5秘籍(第2版)

[美] Matthew MacDonald / 李松峰、朱巍、刘帅 / 人民邮电出版社 / 2015-4 / 89.00元

不依赖插件添加音频和视频,构建适用于所有浏览器的播放页面。 用Canvas创建吸引人的视觉效果,绘制图形、图像、文本,播放动画,运行交互游戏。 用CSS3将页面变活泼,比如添加新奇的字体,利用变换和动画添加吸引人的效果。 设计更出色的Web表单,利用HTML5新增的表单元素更加高效地收集访客信息。 一次开发,多平台运行,实现响应式设计,创建适配桌面计算机、平板电脑和智能手机......一起来看看 《HTML5秘籍(第2版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具