JxlNukePlugin 1.0.1

JxlNukePlugin 1.0.1

https://github.com/awxkee/jxl-coder-swift 维护。



 
依赖项
Nuke>= 0
JxlCoder>= 0
 

  • 用户名称

JxlCoder

这是什么?

此包为所有苹果平台提供对 JXL 图像的支持。支持以便捷的方式编码和解码 JXL 图像

一个用于在 iOS、MacOS 或编码 JXL 图像的包。还为 Nuke 和 SDWebImage 提供了 JXL 支持。支持旧版本的 iOS、MacOSX 以及不支持 JXL 图像的所有模拟器

基于 libjxl 开发的包
项目的主要目标是使用在所有 Apple 平台上使用 JXL 图像等,以可用的速度和便捷性

已预编译支持 iOS 11+、Mac OS 11+

安装

Swift包管理器

转到“文件/ Swift包/ 添加包依赖…”,输入包仓库URL https://github.com/awxkee/jxl-coder-swift,然后选择撰写这篇文档时的最新master分支。

使用方法

import JxlCoder
// Decompress data
let uiImage: UIImage? = JXLCoder.decode(data: Data()) // or any max CGSize of image
// Compress
let data: Data = try JXLCoder.encode(data: UIImage())

Nuke插件

如果您希望使用JXLNuke配合,您可以在项目中添加JxlCoder库并激活插件

在您的项目中使用以下代码或添加pod JxlNukePlugin

import Nuke
#if canImport(JxlCoder)
import JxlCoder
#endif

public final class JxlNukePlugin: Nuke.ImageDecoding {

    public init() {
    }

    public func decode(_ data: Data) -> ImageContainer? {
        guard (try? JXLCoder.isJXL(data: data)) ?? false else { return nil }
        guard let image = try? JXLCoder.decode(data: data) else {
            return nil
        }
        return ImageContainer(image: image)
    }

    public func decodePartiallyDownloadedData(_ data: Data) -> ImageContainer? {
        return nil
    }
}

// MARK: - check JXL format data.
extension JxlNukePlugin {

    public static func enable() {
        Nuke.ImageDecoderRegistry.shared.register { (context) -> ImageDecoding? in
            JxlNukePlugin.enable(context: context)
        }
    }

    public static func enable(context: Nuke.ImageDecodingContext) -> Nuke.ImageDecoding? {
        return try? JXLCoder.isJXL(data: context.data) ? JxlNukePlugin() : nil
    }
}

// MARK: - check JXL format data.
extension JxlNukePlugin {

    public static func enable() {
        Nuke.ImageDecoderRegistry.shared.register { (context) -> ImageDecoding? in
            JxlNukePlugin.enable(context: context)
        }
    }

    public static func enable(context: Nuke.ImageDecodingContext) -> Nuke.ImageDecoding? {
        return try? JXLCoder.isJXL(data: context.data) ? JxlNukePlugin() : nil
    }

}

Jxl SDWebImagePlugin

使用提供的代码或包含 pod JxlSDWebImageCoder

#if canImport(JxlCoder)
import JxlCoder
#endif
import SDWebImage

public class JxlSDWebImageCoder: NSObject, SDImageCoder {
    public override init() {
    }

    public func canDecode(from data: Data?) -> Bool {
        guard let data else {
            return false
        }
        return (try? JXLCoder.isJXL(data: data)) ?? false
    }

    public func decodedImage(with data: Data?, options: [SDImageCoderOption : Any]? = nil) -> UIImage? {
        guard let data else {
            return nil
        }
        return try? JXLCoder.decode(data: data)
    }

    public func canEncode(to format: SDImageFormat) -> Bool {
        true
    }

    public func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption : Any]? = nil) -> Data? {
        guard let image else {
            return nil
        }
        return try? JXLCoder.encode(image: image)
    }
}

// after register the plugin
SDImageCodersManager.shared.addCoder(JxlSDWebImageCoder())

目前,JXL nuke 插件不支持动画 JXL,所以您需要自己完成

免责声明

待办

  • 测试
  • 一些例子