Comments (5)
Hi,
As I tried, it seems that the default image processor is already supporting AVIF with UIImageView extension, so I guess you can just give the URL of an AVIF image to Kingfisher and it should just work. See the example in action:
As I tried under iOS 16 and iOS 17, both seems working fine.
Do you have a case (maybe any earlier iOS versions?) that it does not work?
If the default one does not work in some cases, it is still very easy to integrating any existing AVIF decoder to Kingfisher. Take the avif.swift as example, after importing, you can add these to your project to load an AVIF image:
struct KingfisherAVIFProcessor: ImageProcessor {
var identifier: String = "KingfisherAVIF"
func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? {
switch item {
case .data(let data):
return AVIFDecoder.decode(data)
case .image(let image):
return image
}
}
}
struct KingfisherAVIFSerializer: CacheSerializer {
func data(with image: Kingfisher.KFCrossPlatformImage, original: Data?) -> Data? {
return try? AVIFEncoder.encode(image: image, quality: 50)
}
func image(with data: Data, options: Kingfisher.KingfisherParsedOptionsInfo) -> Kingfisher.KFCrossPlatformImage? {
return AVIFDecoder.decode(data)
}
}
And use it as:
imageView.kf.setImage(
with: url,
options: [
.processor(KingfisherAVIFProcessor()),
.cacheSerializer(KingfisherAVIFSerializer())
]
)
from kingfisher.
thanks for the quick reply! You're right, it works fine in most cases. I forgot to mention, that it doesn't works on iOS 15. I've checked on iPhone 13 mini, iOS 15.4.
For that case, maybe I can recommend to apply the DefaultImageProcessor
first, and then if it returns nil
, use the method from AVIF specified decoder:
struct KingfisherAVIFProcessor: ImageProcessor {
var identifier: String = "KingfisherAVIF"
func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? {
switch item {
case .data(let data):
return DefaultImageProcessor.default.process(item: item, options: options) ?? AVIFDecoder.decode(data)
case .image(let image):
return image
}
}
}
Then it is possible for you to get the system default implementation if the system can decode the image. Otherwise if for older systems, fallback to the AVIF specified decoders.
from kingfisher.
Our project currently heavily uses Kingfisher, but we struggle loading images in AVIF format.
Any plans to introduce support of AVIF?
Does anybody found workaround?
from kingfisher.
hey @onevcat , thanks for the quick reply! You're right, it works fine in most cases. I forgot to mention, that it doesn't works on iOS 15. I've checked on iPhone 13 mini, iOS 15.4.
But anyway, thanks a lot sharing a workaround, much appreciated!
from kingfisher.
yeah, keeping default image processor make sense. thanks for sharing thoughts!
from kingfisher.
Related Issues (20)
- Upload Privacy Policy HOT 2
- KingfisherManager.shared warning on Xcode 15.3 with Strict Concurrency Checking set to complete HOT 4
- Crash at ImageContext.swift line 84. EXC_BAD_ACCESS (SIGSEGV) HOT 1
- Race Condition in ImageDownloader.addDownloadTask HOT 1
- Some Crashs On iPad5.3
- CPListItem' is only available in iOS 12.0 or newer HOT 1
- 同一个cacheKey有不用的downloadURL,主要是加入size控制,如何实现同一cacheKey只缓存size更大的图片数据呢
- [Question] Show a stub ONLY after attempt to load image by URL. HOT 1
- SwiftUI中如何使用progressiveJPEG
- Memory issue
- How do I add suffixes to cache paths, such as.jpg HOT 2
- Undefined symbols for architecture arm64: HOT 1
- ingfisherWebP 在iOS16.7.7 系统中,加载webp 图片不会动,在其他系统中没问题 HOT 1
- Disk Cache can grow significantly larger than 'sizeLimit' HOT 4
- dyld[769]: Library not loaded: @rpath/lib/libswiftCoreGraphics.dylib HOT 1
- No trust evaluation handling after receiving the authentication challenge HOT 1
- No exact matches in call to instance method 'retrieveImage' HOT 1
- 【QUESTION】Kingfisher In Memory Graph HOT 5
- 使用ResizingImageProcessor Crash HOT 5
- SessionDelegate.urlSession(_:dataTask:didReceive:)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kingfisher.