- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在制作一个照片编辑应用。
当用户选择一张照片时,它会使用以下代码自动转换为黑白照片:
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 数据以用于 ImageView /通常只是 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
}
关于swift - 来自 CIImage 的 PNG/JPEG 表示总是返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590281/
我正在尝试创建一个将过滤器应用于视频文件的应用程序。我想使用核心图像过滤器 imageBuffer obtained from AVAssetReaderInput int heigh
我正在修改找到的代码 here .在代码中,我们使用 AVCaptureSession 从手机摄像头捕获视频,并使用 CIDetector 检测图像馈送中的矩形。提要有一个 640x842 的图像(纵
有什么方法可以将 CIImage 转换为 NSData 而无需将 CIImage 转换为 UIImage 或 CGImage? 我正在尝试制作一个相机应用程序。抓图时,我用CIImage处理图片,给图
我想从文件(文件系统上的 jpeg)旋转一个 UIImage 计算的弧度,但我想围绕图像中的一个点旋转它,并保持图像的原始大小(在图像数据不再存在的图像中有透明间隙,以及已移动到原始帧之外的裁剪图像数
因此,Apple 的文档说 CIImage 符合 Equatable。我认为这意味着以下单元测试将通过。然而,事实并非如此。我很想知道为什么。 func test_CIImageEqualitySho
我在 Playground 上有以下代码: import UIKit var str = "Hello, playground" func rescaledImage(_ image: UIImage
CIColorMap CIFilter 将 CIImage 作为输入。使用另一个 CIFilter(例如 CILinearGradient)动态生成该输入图像是有意义的,但是向颜色图过滤器提供过滤器的
我正在尝试水平翻转我的 CIImage : image = [image imageByApplyingTransform:CGAffineTransformMakeScale(1, -1)]; im
如何将两个或多个 CIImage 组合成另一个。我尝试使用 ciContext.drawImage。我如何从中获取 CGImage?我所理解的是,我正在写一个我应该能够从中获得图像的上下文。如果我理解
我正在使用 CIImage,虽然我知道它不是线性图像,但它确实包含一些数据。 我的问题是 CIImage 的范围属性是否返回像素或点?根据documentation ,说的很少,是工作空间坐标。这是否
我有一个接受 UIImage 的类,用它初始化一个 CIImage,如下所示: workingImage = CIImage.init(image: baseImage!) 然后使用图像以 3x3 的
如何在 CIAffineTransform 之后使我的 CIImage 有限,以便我可以将其传递给 NSBitmapImageRep:initWithCIImage? 总的来说,我想通过 CIAddi
我使用一些CIFilter来进行一些图像处理。我发现 UIImageView 太慢,无法实时显示输出图像。我关注了documentation并构建了GLKView。现在性能很完美,但旋转时图像呈现为黑
我有一个 258x258 的 CIImage。我应用过滤器 CIAreaAverage到它,以获得该图像的平均颜色的绿色值。 我正在使用此功能来获得... // channel 0,1,2 = red
我正在尝试裁剪图像并通过夹紧从边缘延伸颜色,但之后返回一个奇怪的图像大小: let image = UIImage(named: "frame_1") var ciimage = CIImage(im
核心图像不起作用: let fileUrl = Bundle.main.url(forResource: "image", withExtension: "png") let bega
我有一个 UIImageView 我想向我的 UIImageView 添加一个 CIImage这是我的代码 @IBOutlet weak var imgimgurl: UIImageView! img
我是 swift 新手,正在尝试使用 React Native 的 CoreML 功能。 我有一个 URL 为字符串的源文件。我使用 let imageURL = URL(fileURLWithPat
我正在使用一个 CIImage,我需要通过每个像素减去 128 然后除以 128 来对其进行标准化。我怎样才能用CIFilter来做到这一点 最佳答案 不确定这是否有效,但也许您可以应用两个具有静态颜
我正在对来自设备相机的图像运行多个 CoreImage 滤镜,但在将结果保存到相机胶卷时遇到了意想不到的麻烦。我的图像操作的结果是 CIImage,我可以保存到 ALAssetsLibrary 中的数
我是一名优秀的程序员,十分优秀!