swift - 在 Swift 中为图像添加阴影
问题描述
该项目取自 garnele007 的 SwiftOCR。在 Swift 项目中有一个 NSImage (也转换为 .png 用于保存),我想在上面添加一个阴影。存在几个在视图控制器等中添加阴影的示例,但到目前为止,我还没有找到如何使用 Core Graphics/Image 之类的东西添加阴影的示例。我的想象力给了我类似的东西
randomImg.CGAddShadow(阴影:真实,重量:中等)
一些漂浮的指令使用 UIKit,它不适用于这个 MacOS 项目。其他人为了用户的利益添加了一个临时图层,但不保存仍然应用阴影的文件。
目前的代码如下所示:
let customImage: (String) -> OCRImage = { code in
let randomImg = randomImage()
randomImg.lockFocus()
randomImg.draw(in: CGRect(origin: CGPoint.zero, size: randomImg.size))
NSString(string: code).draw(in: CGRect(origin: CGPoint(x: 0, y: -15.5 ), size: randomImg.size), withAttributes: randomFontAttributes())
randomImg.unlockFocus()
let data = NSBitmapImageRep(data: randomImg.tiffRepresentation!)?.representation(using: .png, properties: [:])
return randomImg
}
最终结果希望是一个修改过的文件,上面有一个可以保存和以后查看的阴影。
感谢您的任何建议
解决方案
我最终使用的解决方案(随机棕褐色过滤器):
let context = CIContext()
// Load originalCIImage with contents of the URL
var imageURL = Bundle.main.urlForImageResource(NSImage.Name(rawValue: "image.png"))
var originalCIImage = CIImage(contentsOf: imageURL!)
// Declare func for filter
func sepiaFilter(_ input: CIImage, intensity: Double) -> CIImage?
{
let sepiaFilter = CIFilter(name:"CISepiaTone")
sepiaFilter?.setValue(input, forKey: kCIInputImageKey)
sepiaFilter?.setValue(intensity, forKey: kCIInputIntensityKey)
return sepiaFilter?.outputImage
}
// call the filter func on the image
let sepiaCIImage = sepiaFilter(originalCIImage!, intensity:0.9)
// change the image from CIImage type to NSImage type
let rep = NSCIImageRep(ciImage: sepiaCIImage!)
let filteredImage = NSImage(size: rep.size)
filteredImage.addRepresentation(rep)
// change from NSImage type to .png format
let filterData = NSBitmapImageRep(data: filteredImage.tiffRepresentation!)?.representation(using: .png, properties: [:])
// save the png file to the desktop
do {
try filterData?.write(to: (FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first?.appendingPathComponent("FILTEREDIMAGE.png"))!)
}
catch _ {
print("Adding filter to picture error")
}
// END Sepia Filter
推荐阅读
- python - Tortoise ORM - 具有 Postgresql 时间字段的 Pydantic 模型
- node.js - 有没有办法在插入后立即返回文档?
- gspread - Gspread append 没有删除单引号
- react-native - 我应该如何在嵌套组件中使用钩子
- c++ - C1010: 查找预编译头文件时意外结束。您是否忘记将 '#include "pch.h"' 添加到您的源代码中?即使它在那里
- python - 如何在 Python 中使用 NordVPN?
- bash - 带倒计时线的 while 循环
- javascript - TypeError:n.split 不是函数
- php - MariaDB with PHP: SQLSTATE[HY000] [2002] Connection refused
- c# - 如何修复 Visual Studio 将 C# Unity 脚本视为杂项,因此无法自动完成?