我正在尝试在 Swift 中的 Webp 中转换 PNG 图像,我工作的唯一框架是 OpenCV 到 Objective-c++。
问题是,如果我将图像大小调整为 512x512(这是我需要的分辨率),它就会崩溃:
如果我将图像大小(无论是使用 OpenCV 还是使用 Swift)调整为另一个分辨率(例如 510x510),它不会崩溃。
奇怪的是,在模拟器上它永远不会崩溃,而在 iPhone XS 上它崩溃的次数达到 90%。
如何在 Swift 中将 PNG 转换为 Webp?
如果 Mat 为 512x512,为什么 OpenCV 在执行 imwrite 指令时崩溃?
更新:
OpenCV版本:3.4.2
我发现当 PNG 图像之前从 Core Graphics 框架处理时会发生这个问题。我需要使用它,因为我通过这种方式将 UIVIew 保存为 UIImage:
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
斯威夫特4.0
pod
'SDWebImage'
(https://github.com/SDWebImage/SDWebImage)和'SDWebImage/WebP'
(https://github.com/SDWebImage/SDWebImageWebPCoder)
导入
SDWebImage
if let image_download = UIImage(data: data) {
let photo:Data = image_download.sd_imageData(as: SDImageFormat.webP)!
}
我最终使用了另一个框架将 PNG 转换为 WebP:https://github.com/seanooi/iOS-WebP,必须创建包装器才能在 swift 上使用它,但效果非常好 😊
我的包装非常简单,但可以满足我的需要:
#import <Foundation/Foundation.h>
#import "WebPWrapper.h"
#import "UIImage+WebP.h"
@implementation WebPWrapper
-(NSData *)convertUIImageToWebp:(UIImage *)image :(int)quality {
NSData *webPData = [UIImage imageToWebP:image quality:quality];
return webPData;
}
@end
在 swift 中我这样使用它:
let webPData = WebPWrapper().convertUIImage(toWebp: image, 90)
对于任何只想将图像转换为 WEBP 格式的人:
首次安装:https://github.com/SDWebImage/SDWebImageWebPCoder
import SDWebImageWebPCoder
...
let image = UIImage(...) // define the image
let webpData = SDImageWebPCoder.shared.encodedData(with: image, format: .webP, options: nil)!
let webpImage = UIImage(data: webpData)!