我目前正在制作照片编辑应用。
用户选择了照片后,将使用以下代码将其自动转换为黑白:
func blackWhiteImage(image: UIImage) -> Data {
print("Starting black & white")
let orgImg = CIImage(image: image)
let bnwImg = orgImg?.applyingFilter("CIColorControls", withInputParameters: [kCIInputSaturationKey:0.0])
let outputImage = UIImage(ciImage: bnwImg!)
print("Black & white complete")
return UIImagePNGRepresentation(outputImage)!
}
我在这段代码中遇到的问题是,我不断收到此错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
我的代码配置稍有不同,但是到本UIImagePNG/JPEGRepresentation(xx)
节时仍然会中断。
是否有任何方法可以从CIImage获取PNG或JPEG数据以用于图像视图(通常仅是UIImage)?
其他任何方法都没有详细说明应使用什么代码。
只需开始一个新的图形上下文并在那里绘制您的灰度图像即可。iOS
10或更高版本,您可以使用UIGraphicsImageRenderer,对于较旧的iOS版本语法,请检查编辑历史记录:
Xcode 11•Swift 5.1
func blackWhiteImage(image: UIImage, isOpaque: Bool = false) -> Data? {
guard let ciImage = CIImage(image: image)?.applyingFilter("CIColorControls", parameters: [kCIInputSaturationKey: 0]) else { return nil }
let format = image.imageRendererFormat
format.opaque = isOpaque
return UIGraphicsImageRenderer(size: image.size, format: format).image { _ in
UIImage(ciImage: ciImage).draw(in: CGRect(origin: .zero, size: image.size))
}.pngData()
}
您还可以扩展UIImage以返回灰度图像:
extension UIImage {
var ciImage: CIImage? { CIImage(image: self) }
func grayscale(isOpaque: Bool = false) -> UIImage? {
guard let ciImage = ciImage?.applyingFilter("CIColorControls", parameters: [kCIInputSaturationKey: 0]) else { return nil }
let format = imageRendererFormat
format.opaque = isOpaque
return UIGraphicsImageRenderer(size: size, format: format).image { _ in
UIImage(ciImage: ciImage).draw(in: CGRect(origin: .zero, size: size))
}
}
}
let profilePicture = UIImage(data: try! Data(contentsOf: URL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!))!
if let grayscale = profilePicture.grayscale(), let data = grayscale.pngData() { // or Swift 4.1 or earlier -> let data = UIImagePNGRepresentation(grayscale)
print(data.count) // 689035
}
我有一个Spring应用程序,它使用带有WebMVC的JPA存储库,我正在尝试扩展它以支持图像。我可以上传图像并将它们存储在服务器端,但当涉及到用客户端实际检索图像时,我实际上无法成功发送响应。 首先,这是我公开的客户端API: 下面是我第一次尝试实现: 但是,该方法在测试时会产生以下异常: ServletException:无法解析名为“dispatcher servlet”的servlet中名
问题内容: 我在将简单的PNG转换为JPEG格式时遇到问题。我正在使用以下代码: … … 我最后遇到一个JAI异常-> java.lang.RuntimeException:只能写入1或3字节的字节数据。在com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:148)… 退出选项。有什么建议吗? 问题答案
问题内容: 结果始终为1: 我在phpMyAdmin中运行了$ sql查询,它返回3,所以查询不是问题。$ vote_total全局初始化为0,因此1来自某个地方。我还需要提供什么其他信息来帮助我? 谢谢,瑞安 问题答案: 返回选定的行数,而不是特定行的字段。使用来获取您与您的查询选择的行: 您还可以用来获取一行并获取特定字段: 这将获取第一行(从零开始)并返回第一字段(从零开始)。
问题内容: 我已经写了这段简单的代码: 在我的情况当属。谁能建议/建议出什么问题了? 问题答案: 错误检查和处理是程序员的朋友。检查初始化和执行cURL函数的返回值。并在失败的情况下包含更多信息: *在 手动状态: 成功返回cURL句柄,错误返回 FALSE 。 我观察到该函数在您使用其参数且无法解析域时会返回。如果未使用该参数,则该函数 可能 永远不会返回。但是,请务必始终进行检查,因为该手册并
我使用Ehcache 2.6.8作为Spring Boot应用程序的一部分,作为Hibernate 4.3.11的二级缓存。我有一个JMX MBean,它允许我检查缓存的内容(如果您感兴趣,可以在这里查看)。 首先,我使用CacheManager名称来获取缓存列表。这很好。我可以用返回缓存。然后我调用。这很好,cacheName是“com.myapp.DomainObjectName”,键被列为“
我正试图编写一个单元测试来测试两个列表的排序。我所做的是调用自定义排序比较器,然后将原始列表与排序列表进行比较。然后,我使用assertEquals来测试排序的列表和原始列表是否匹配。 假设我有一个简单的模型...病人。 控制台以相同的顺序输出这些列表,但assertEquals返回false。我甚至尝试以相同的顺序创建两个完全相同的列表,并尝试assertEquals,但它仍然返回false。