返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Swift缩放并填充图片功能的实现
  • 584
分享到

Swift缩放并填充图片功能的实现

2024-04-02 19:04:59 584人浏览 安东尼
摘要

摘要 直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦。 最近有一个需求

摘要

直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦。

最近有一个需求,就是将图片先等比例缩放到指定大小,然后将空余出来空间填充为黑色,返回指定大小的图片。

这种直接操作图片的需求,就要考虑使用 UIGraphicsBeginImageContext 函数实现。它可以理解为一个画布,我们只需要把图片放在画布的对应位置,把画布的多余地方全部涂成黑色就完成。

实现

先看代码,然后再分析:


func rescaleAndPading(_ image: UIImage, targetSize: CGSize) -> UIImage? {
        let max = max(image.width, image.height)
        let ratio = Float(targetSize.width) / Float(max)
        
        let (newWidth, newHeight) = (
 
            Int(Float(image.width) * ratio),
            Int(Float(image.height) * ratio)
        )
        
        let (tarWidth, tarHeight) = (
            
            Int(targetSize.width),
            Int(targetSize.height)
        )
        
        let deltaW = tarWidth - newWidth
        let deltaH = tarHeight - newHeight
        
        let (y, x) = (
            
            deltaH / 2,
            deltaW / 2
        )
        
        // 创建绘图上下文环境
        UIGraphicsBeginImageContext(targetSize)
        let context = UIGraphicsGetCurrentContext()
        // 黄色背景
        context?.setFillColor(UIColor.yellow.cGColor)
        context?.fill(CGRect(x: 0, y: 0, width: tarWidth, height: tarHeight))
        image.draw(in: CGRect(x: x, y: y, width: newWidth, height: newHeight))
        // 获取上下文里的内容,将视图写入到新的图像对象
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }

看代码,总结出逻辑很简单,就是首先根据目标的 size 来计算出需要缩放的比例(按照最大边来处理),计算出图片在画布中的对应位置和缩放后的宽高。

最后就是重头戏,调用 UIGraphicsBeginImageContext 来绘画。这里要留意几个参数的设置:

  • UIGraphicsBeginImageContext(targetSize) 中的 targetSize 是设置画布的大小。
  • image.draw(in:) 是图片在画布中的 rect 。
  • context 是画布的对象
  • context?.setFillColor(_) 是设置画布的颜色,若不设置,默认为 black(黑色)
  • context?.fill()是设置画布填充的 rect。

重点

如果是前面留意逻辑时,会发现逻辑中是先放置图片,然后填充空余空间,但是代码中是先填充全部空间,然后再放置图片,这是为什么?

经过测试后发现,后绘制的区域会覆盖掉先前已经绘制的区域,所以代码中的处理就是防止填充区域覆盖图片区域。

到此这篇关于Swift缩放并填充图片功能的实现的文章就介绍到这了,更多相关Swift缩放填充图片内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Swift缩放并填充图片功能的实现

本文链接: https://lsjlt.com/news/156177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Swift缩放并填充图片功能的实现
    摘要 直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦。 最近有一个需求...
    99+
    2024-04-02
  • Swift如何实现缩放并填充图片功能
    小编给大家分享一下Swift如何实现缩放并填充图片功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现先看代码,然后再分析:func rescaleA...
    99+
    2023-06-25
  • Android图片等比例缩放和填充屏幕效果
    本文实例为大家分享了Android图片等比例缩放和填充屏幕的具体代码,供大家参考,具体内容如下第一种方法:在ImageView的t同事设置两个属性 android:adjustViewBounds="true" android:scaleT...
    99+
    2023-05-30
    android 图片等比缩放 填充屏幕
  • java实现上传图片并压缩图片大小功能
    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式...
    99+
    2023-05-31
    java 上传图片 压缩图片
  • 如何用js实现手指缩放图片功能
    这篇“如何用js实现手指缩放图片功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用js实现手指缩放图片功能”文章吧。需...
    99+
    2023-06-26
  • php实现图片压缩功能
    简述: 使用php的GD库可以将图片按固定宽高或者等比例压缩,主要利用的函数是: imagecopyresampled:将一张图片中的一块区域复制到另一张图片上 等比例压缩   public function compressImg($sr...
    99+
    2023-08-31
    php 开发语言
  • Android图片采样缩放功能实例代码
    为什么要对Android中的图片进行采样缩放呢?是为了更加高效的加载Bitmap。假设通过imageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这时候把整张图片加载进来后再设给ImageView是没有必要的,因...
    99+
    2023-05-30
    android 采样 缩放
  • 利用vue组件实现图片的拖拽和缩放功能
    目录前言如图所示:方法如下:总结前言 vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率...
    99+
    2024-04-02
  • android 大图片拖拽并缩放实现原理
    由于最近项目忙,博客一直没有时间更新,今天有点时间就连续更新两篇吧,过过瘾。 这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题...
    99+
    2022-06-06
    图片 Android
  • 基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能
    前言:基于RxPaparazzo的图片裁剪,图片旋转、比例放大|缩小。效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及知识:Material Design(CardView+Coo...
    99+
    2023-05-31
    rxpaparazzo 图片裁剪 para
  • element前端实现压缩图片的功能
    目录前言实现效果实现步骤前言 随着现在手机像素,拍照功能越来越好,随之而来的是本地图片越来越大,那么如何更好的将本地图片上传到后端接口呢?这是后台管理系统常见的场景和头疼的问题,这里...
    99+
    2023-03-01
    element 压缩图片 vue 压缩图片
  • Android单点触控实现图片平移、缩放、旋转功能
    相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进...
    99+
    2022-06-06
    图片 Android
  • jQuery如何实现鼠标滚轮控制图片缩放功能
    这篇文章主要为大家展示了“jQuery如何实现鼠标滚轮控制图片缩放功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现鼠标滚轮控制图片缩放功能...
    99+
    2024-04-02
  • Android 背景图片的缩放实现
    Android 背景图片的缩放  ONE Goal ,ONE Passion ! 我们看到一些效果,控件中的背景图片会慢慢变大,但是控件不会随着图片的放大而变大.效...
    99+
    2022-06-06
    图片 背景图 Android
  • springboot实现图片大小压缩功能
    本文实例为大家分享了springboot实现图片大小压缩的具体代码,供大家参考,具体内容如下 application.properties配置文件 #后端接收图片大小 spring....
    99+
    2024-04-02
  • Java实现图片比率缩放
    本文实例为大家分享了Java实现图片比率缩放的具体代码,供大家参考,具体内容如下 通过Thumbnails实现图片缩放 需要导入pom依赖,可以到中央仓库获取最小的工具包 <d...
    99+
    2024-04-02
  • Android实现图片双指缩放
    本文实例为大家分享了Android实现图片双指缩放的具体代码,供大家参考,具体内容如下 展示 源码 using Android.App; using Android.OS; u...
    99+
    2024-04-02
  • vue怎么实现图片缩放
    这篇“vue怎么实现图片缩放”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么实现图片缩放”文章吧。实现效果如下这几天...
    99+
    2023-06-30
  • Vue 图片监听鼠标滑轮滚动实现图片缩小放大功能(实现思路)
    目录前言效果:实现思路全页面代码:相关知识点分享前言 其实想要实现功能很简单,就是在一张图片上监听鼠标滑轮滚动的事件,然后根据上滚还是下滚实现图片的缩放。 效果: 注:该配图使用《...
    99+
    2023-05-13
    vue图片缩小放大 vue鼠标滑轮滚动
  • 怎么利用vue组件实现图片的拖拽和缩放功能
    这篇文章将为大家详细讲解有关怎么利用vue组件实现图片的拖拽和缩放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作