// // KMAdvertisementImage.swift // KMAdvertisement // // Created by lizhe on 2023/1/12. // 图片缓存 import Foundation import AppKit typealias KMAdvertisementImageCompletion = (_ image: NSImage) -> Void @objc class KMAdvertisementImage: NSObject { @objc static func imageWithURL(url : URL?, completion: KMAdvertisementImageCompletion?) -> NSImage { var image: NSImage = NSImage() if url != nil { //获取缓存图片是否存在 let imageString: String = KMAdvertisementImageCache.fetchImageCache(url: url!) if imageString != "" { //存在获取本地图片 image = NSImage.init(contentsOfFile: imageString) ?? NSImage() if completion != nil { completion!(image) } } else { let path = KMAdvertisementImageCache.kImageCacheFilePath let filePath = (path as String) + "/" + (NSString(string: NSString(string: url!.path).lastPathComponent) as String) KMAdvertisementRequestServer.requestServer.downLoad(inputURL: url!, filePath: filePath) { progress in } completion: { task, responseObject, error in if completion != nil { DispatchQueue.main.async { image = NSImage.init(contentsOfFile: KMAdvertisementImageCache.fetchImageCache(url: url!)) ?? NSImage() completion!(image) } } } } } return image } } class KMAdvertisementImageCache: NSObject { static let kImageCacheFilePath: NSString = NSTemporaryDirectory() + "Advertisement/ImageCache" as NSString static func saveImageCache(image: NSImage, name: String) { if image.size.width != 0 { let path = KMAdvertisementImageCache.kImageCacheFilePath let filePath = (path as String) + "/" + NSString(string: name).deletingPathExtension + ".png" if (!FileManager.default.fileExists(atPath: path as String)) { try?FileManager.default.createDirectory(atPath: path as String, withIntermediateDirectories: true, attributes: nil) } #if os(iOS) #elseif os(OSX) let cgimage = image.cgImage(forProposedRect: nil, context: nil, hints: nil) if cgimage != nil { let rep = NSBitmapImageRep.init(cgImage: cgimage!) try?rep.representation(using: .png, properties: [:])?.write(to: URL(fileURLWithPath: filePath)) } else { try?image.tiffRepresentation?.write(to: URL(fileURLWithPath: filePath)) } print(path) #endif } } static func fetchImageCache(url: URL) -> String { if (!FileManager.default.fileExists(atPath: kImageCacheFilePath as String)) { try?FileManager.default.createDirectory(atPath: kImageCacheFilePath as String, withIntermediateDirectories: true, attributes: nil) } var string = "" let name = NSString(string: url.path).lastPathComponent let manager = FileManager.default let contentsOfPath = try? manager.contentsOfDirectory(atPath: kImageCacheFilePath as String) if (contentsOfPath!.contains(name)) { string = (kImageCacheFilePath as String) + "/" + name } return string } }