zoukankan      html  css  js  c++  java
  • swift

    import Foundation
    import UIKit
    
    extension Data {
        enum ImageType {
            case unknown
            case jpeg
            case jpeg2000
            case tiff
            case bmp
            case ico
            case icns
            case gif
            case png
            case webp
        }
        
        func detectImageType() -> Data.ImageType {
            if self.count < 16 { return .unknown }
            
            var value = [UInt8](repeating:0, count:1)
            
            self.copyBytes(to: &value, count: 1)
            
            switch value[0] {
            case 0x4D, 0x49:
                return .tiff
            case 0x00:
                return .ico
            case 0x69:
                return .icns
            case 0x47:
                return .gif
            case 0x89:
                return .png
            case 0xFF:
                return .jpeg
            case 0x42:
                return .bmp
            case 0x52:
                let subData = self.subdata(in: Range(NSMakeRange(0, 12))!)
                if let infoString = String(data: subData, encoding: .ascii) {
                    if infoString.hasPrefix("RIFF") && infoString.hasSuffix("WEBP") {
                        return .webp
                    }
                }
                break
            default:
                break
            }
            
            return .unknown
        }
        
        static func detectImageType(with data: Data) -> Data.ImageType {
            return data.detectImageType()
        }
        
        static func detectImageType(with url: URL) -> Data.ImageType {
            if let data = try? Data(contentsOf: url) {
                return data.detectImageType()
            } else {
                return .unknown
            }
        }
        
        static func detectImageType(with filePath: String) -> Data.ImageType {
            let pathUrl = URL(fileURLWithPath: filePath)
            if let data = try? Data(contentsOf: pathUrl) {
                return data.detectImageType()
            } else {
                return .unknown
            }
        }
        
        static func detectImageType(with imageName: String, bundle: Bundle = Bundle.main) -> Data.ImageType? {
            
            guard let path = bundle.path(forResource: imageName, ofType: "") else { return nil }
            let pathUrl = URL(fileURLWithPath: path)
            if let data = try? Data(contentsOf: pathUrl) {
                return data.detectImageType()
            } else {
                return nil
            }
        }
        
        
    }
    签 名:被别人嫉妒,说明你卓越;你嫉妒别人,说明你无能。 座右铭:抓紧一切时间睡觉。
  • 相关阅读:
    HttpWatch 有火狐版本?
    JQgrid的最新API
    jqgrid
    JSON的学习网站
    array创建数组
    Numpy安装及测试
    SQLite3删除数据_7
    SQLite3修改数据_6
    SQLite3查询一条数据_5
    SQLite3查询所有数据_4
  • 原文地址:https://www.cnblogs.com/baitongtong/p/15010779.html
Copyright © 2011-2022 走看看