Browse Source

Add KingFisher downsampler processor for large images

Changelog-Added: Downscale images if they are unreasonably large
Closes: #240
post-button-style
OlegAba 2 years ago
committed by William Casarin
parent
commit
39fa973a80
  1. 25
      damus/Views/ProfilePicView.swift

25
damus/Views/ProfilePicView.swift

@ -55,6 +55,7 @@ struct InnerProfilePicView: View {
KFAnimatedImage(url)
.callbackQueue(.dispatch(.global(qos: .background)))
.processingQueue(.dispatch(.global(qos: .background)))
.appendProcessor(LargeImageProcessor())
.configure { view in
view.framePreloadCount = 1
}
@ -104,6 +105,30 @@ struct ProfilePicView: View {
}
}
struct LargeImageProcessor: ImageProcessor {
let identifier: String = "com.damus.largeimageprocessor"
let maxSize: Int = 1000000
let downsampleSize = CGSize(width: 200, height: 200)
func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? {
let downsamplingImageProcessor = DownsamplingImageProcessor(size: downsampleSize)
switch item {
case .image(let image):
if image.cacheCost > maxSize {
return downsamplingImageProcessor.process(item: item, options: options)
}
return image
case .data(let data):
if data.count > maxSize {
return downsamplingImageProcessor.process(item: item, options: options)
}
return KFCrossPlatformImage(data: data)
}
}
}
func get_profile_url(picture: String?, pubkey: String, profiles: Profiles) -> URL {
let pic = picture ?? profiles.lookup(id: pubkey)?.picture ?? robohash(pubkey)
if let url = URL(string: pic) {

Loading…
Cancel
Save