• 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
            }
        }
        
        
    }
    签 名:被别人嫉妒,说明你卓越;你嫉妒别人,说明你无能。 座右铭:抓紧一切时间睡觉。
  • 相关阅读:
    wpf中DataGrid自定义验证(包含BindingGroup)
    WPF博客地址分享
    ComboBox在WPF中的绑定示例:绑定项、集合、转换,及其源代码
    【windows phone】CollectionViewSource的妙用
    WPF之Binding深入探讨
    正确理解WPF中的TemplatedParent
    继续聊WPF——获取ComboBox中绑定的值
    WPF触发器(Trigger、DataTrigger、EventTrigger)
    jQuery和javaScript页面加载完成时触发的事件
    jQuery对象和dom对象的转换
  • 原文地址:https://www.cnblogs.com/baitongtong/p/15010779.html
Copyright © 2020-2023  润新知