Swift+UIKit实现图片编辑App:滤镜选择与应用
创作时间:
作者:
@小白创作中心
Swift+UIKit实现图片编辑App:滤镜选择与应用
引用
CSDN
等
10
来源
1.
https://m.blog.csdn.net/weixin_26735419/article/details/108496869
2.
https://m.blog.csdn.net/potato512/article/details/52984667
3.
https://blog.csdn.net/qq_30185503/article/details/105147057
4.
https://www.jianshu.com/p/5bbc6d08ef62
5.
https://www.jianshu.com/p/261ea186b6f8
6.
https://m.blog.csdn.net/weixin_34055910/article/details/94469481
7.
https://blog.csdn.net/offbye/article/details/50888869
8.
https://developer.apple.com/documentation/coreimage/processing_an_image_using_built-in_filters
9.
https://developer.apple.com/cn/videos/play/wwdc2022/10072/?time=1015
10.
https://www.cnblogs.com/jimcheng/p/4166942.html
让我按照规划逐步实现这个图片编辑App的功能。以下是具体的代码实现:
- 首先创建一个单视图应用程序,并在ViewController中搭建基本界面结构:
import UIKit
import CoreImage
class ViewController: UIViewController {
let mainImageView = UIImageView()
let scrollView = UIScrollView()
var filterImageViews = [UIImageView]()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupScrollView()
applyFilters()
}
func setupUI() {
mainImageView.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: view.frame.width)
mainImageView.contentMode = .scaleAspectFit
mainImageView.image = UIImage(named: "sample")
view.addSubview(mainImageView)
scrollView.frame = CGRect(x: 0, y: mainImageView.frame.maxY + 20, width: view.frame.width, height: 100)
scrollView.isPagingEnabled = true
scrollView.showsHorizontalScrollIndicator = false
view.addSubview(scrollView)
}
func setupScrollView() {
let filterNames = ["CISepiaTone", "CIColorInvert", "CIGaussianBlur", "CIPhotoEffectNoir"]
let filterWidth = scrollView.frame.width / CGFloat(filterNames.count)
for (index, filterName) in filterNames.enumerated() {
let imageView = UIImageView(frame: CGRect(x: CGFloat(index) * filterWidth, y: 0, width: filterWidth, height: scrollView.frame.height))
imageView.contentMode = .scaleAspectFit
scrollView.addSubview(imageView)
filterImageViews.append(imageView)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(filterTapped(_:)))
imageView.addGestureRecognizer(tapGesture)
imageView.isUserInteractionEnabled = true
}
scrollView.contentSize = CGSize(width: filterWidth * CGFloat(filterNames.count), height: scrollView.frame.height)
}
func applyFilters() {
guard let image = mainImageView.image else { return }
for (index, filterName) in ["CISepiaTone", "CIColorInvert", "CIGaussianBlur", "CIPhotoEffectNoir"].enumerated() {
if let filter = CIFilter(name: filterName) {
filter.setValue(CIImage(image: image), forKey: kCIInputImageKey)
if let outputImage = filter.outputImage {
let context = CIContext()
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
let filteredImage = UIImage(cgImage: cgImage)
filterImageViews[index].image = filteredImage
}
}
}
}
}
@objc func filterTapped(_ sender: UITapGestureRecognizer) {
guard let imageView = sender.view as? UIImageView,
let index = filterImageViews.firstIndex(of: imageView),
let filterName = ["CISepiaTone", "CIColorInvert", "CIGaussianBlur", "CIPhotoEffectNoir"][safe: index] else { return }
if let filter = CIFilter(name: filterName) {
filter.setValue(CIImage(image: mainImageView.image!), forKey: kCIInputImageKey)
if let outputImage = filter.outputImage {
let context = CIContext()
if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
let filteredImage = UIImage(cgImage: cgImage)
mainImageView.image = filteredImage
}
}
}
}
}
- 代码解释:
mainImageView用于显示主图片scrollView用于承载滤镜效果图片filterImageViews数组存储scrollView中的所有滤镜图片视图setupUI方法初始化主图片和scrollView的布局setupScrollView方法设置scrollView的分页和滚动条显示,并为每个滤镜图片添加点击手势识别器applyFilters方法应用滤镜效果到scrollView中的图片filterTapped方法处理滤镜图片的点击事件,将选中的滤镜效果应用到主图片上
- 运行效果:
- 应用启动后显示主图片和底部的滤镜效果预览
- 用户可以通过左右滑动查看不同滤镜效果
- 点击任意滤镜预览图,主图片将应用相应的滤镜效果
这个实现满足了背景资料中要求的基本功能,使用了Swift和UIKit框架,通过纯代码方式完成了界面搭建和功能实现。同时,利用Core Image框架实现了图片滤镜效果的处理。
热门推荐
牛皮癣患者日常护理指南
秋日打卡:悦来生态滨江公园&中心广场
日元跌至34年新低,五一中国游客赴日消费创新高
南京江南水泥厂:从“东方水泥之冠”到文创园区,曾庇护三万难民
日元跌至34年新低,超六成日本企业利润受损
2024年11月以来日元汇率波动加剧,美日货币政策分化是主因
人民币升值至21.3420日元,留学旅游购物全面受益
退休提取公积金最新指南:条件、流程和所需材料全解析
桂花鸭、韩复兴、陆家店:南京盐水鸭的三巨头
南京盐水鸭:一道承载千年味道的送礼佳品
骶骨脊索瘤切除后如何保养恢复?会有后遗症吗?
香港医疗机构发布化疗期间高蛋白饮食指南
疏肝利胆食谱大全:吃出健康新境界
中国19省特色美食地图:从北京烤鸭到云南普洱
中老铁路助力“云菜”出滇,年出口量破百万吨
房地产企业财务分析框架:九大核心指标解析
龙头房企也扛不住了:保利中海三季报业绩大幅下滑
诗画交融:王维山水诗的艺术境界
沈绍功教授创新糖尿病治疗法:补气为主、养阴为辅
REM睡眠揭秘:梦境是如何形成的?
6月起北京地铁推双温车厢:强冷弱冷自由选
羔羊混合精料配方:科学养殖的关键
登高望远话重阳:从古诗意境到现代传承
重阳节登高,古人如何“花式”庆重阳?
支付宝余额宝大额转出指南:限额时段与安全技巧
冬季便秘?试试这些自然疗法
姜茶的功效与制作:一杯茶解决肚子疼
羊肉汤真会让你便秘吗?
苏打水缓解肚子疼:原理、方法及禁忌全解析
工地老板拖欠工资怎么办?五种合法途径助你讨回血汗钱