如何在 Swift 中将 PNG 转换为 WebP?

问题描述 投票:0回答:3

我正在尝试在 Swift 中的 Webp 中转换 PNG 图像,我工作的唯一框架是 OpenCVObjective-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)
        }
ios swift opencv objective-c++
3个回答
5
投票

斯威夫特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)!
}

4
投票

我最终使用了另一个框架将 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)

0
投票

对于任何只想将图像转换为 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)! 
© www.soinside.com 2019 - 2024. All rights reserved.