首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何以不同的分辨率计算UIImage的裁剪尺寸(rect)

以下是关于如何以不同的分辨率计算UIImage的裁剪尺寸(rect)的完善且全面的答案:

首先,我们需要了解UIImage是iOS和macOS中的一个类,用于表示图像。我们可以使用UIImage的方法来获取图像的尺寸,并根据不同的分辨率来计算裁剪尺寸。

以下是一个简单的示例代码,用于计算UIImage的裁剪尺寸:

代码语言:swift
复制
func calculateCropRect(image: UIImage, targetSize: CGSize) -> CGRect {
    let imageSize = image.size
    let widthRatio = targetSize.width / imageSize.width
    let heightRatio = targetSize.height / imageSize.height
    let scaleRatio = max(widthRatio, heightRatio)
    
    let scaledWidth = imageSize.width * scaleRatio
    let scaledHeight = imageSize.height * scaleRatio
    let x = (scaledWidth - targetSize.width) / 2.0
    let y = (scaledHeight - targetSize.height) / 2.0
    
    return CGRect(x: x, y: y, width: targetSize.width, height: targetSize.height)
}

在这个示例代码中,我们首先获取了图像的尺寸,然后计算了目标尺寸和图像尺寸之间的比例。接着,我们根据比例计算出缩放后的图像尺寸,并计算出裁剪尺寸的起始点和尺寸。

最后,我们可以使用这个方法来计算UIImage的裁剪尺寸,并使用CGRect方法来获取裁剪尺寸的起始点和尺寸。

需要注意的是,这个示例代码只是一个简单的示例,实际上还有很多其他的方法可以用来计算裁剪尺寸,例如使用UIViewContentMode方法来计算裁剪尺寸。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CALayer 实用属性补充

kCAGravityResizeAspectFill  contentsScale 这个属性是浮点类型,默认值为1.0,它定义了像素尺寸和视图大小比例(类似于分辨率,UIView相似功能属性是contentScaleFactor...当我们使用UIImage时,会获取高质量图片,但CGImage没有拉伸概念,因此使用CGImage设置图片时,拉伸因素会在转换时候丢失,当用代码设置contents图片时,要手动设置图层contentsScale...与bounds和frame不同,contentsRect不是使用点来计算,它使用了单位坐标,值在0~1之间。默认值是{0,0,1,1},意为整个图片大小。 ?...图片选自网络 contentsRect在App中常常用来将拼合图片裁剪开来,分解成各个部分显示出来。  ...(UIImage *)image toView:(UIView *)toView withContentsRect:(CGRect)rect{ toView.layer.contents = (__bridge

91030

Swift-图像性能优化

如果图片显示在一个Cell上面,滚出屏幕再滚动回来时候,图片仍然需要重新被设置,在进入屏幕之前还需要一次拉伸操作,这些拉伸操作是会消耗CPU计算。这样设置多了以后就会严重影响性能。.../** * 1.绘图尺寸 * 2.不透明:false(透明) / true(不透明) * 3.scale:屏幕分辨率,默认情况下生成图像使用'1.0'分辨率,图像质量不好...Returns: 返回一个新'目标尺寸'图像 func avatarImage(image: UIImage, size: CGSize, backColor:UIColor?).../** * 1.绘图尺寸 * 2.不透明:false(透明) / true(不透明) * 3.scale:屏幕分辨率,默认情况下生成图像使用'1.0'分辨率,图像质量不好...* 3.scale:屏幕分辨率,默认情况下生成图像使用'1.0'分辨率,图像质量不好 * 可以指定'0',会选择当前设备屏幕分辨率 */

1.7K70

图层树和寄宿图 -- iOS Core Animation 系列一

contentsScale其实属于支持高分辨率屏幕机制一部分,是用来判断在绘制图层时候应该为寄宿图创建空间大小,和需要显示图片拉伸度(假设没有设置contentsGravity)。...2.1.5 contentsRect CALayercontentsRect属性允许我们在图层边框里显示寄宿图一个子域。和bounds、frame不同,contentsRect不是按点来计算。...默认contentsRect是{0, 0, 1, 1},意味着整个寄宿图默认都是课件。如果指定小一点矩形,图片就会被裁剪: ?...同一图片使用不同contentsCenter。...因为当图层显示在屏幕上时,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。但是绘制圆仍然被裁剪了。

1.2K20

iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文

(CGRect rect, CGBlendMode blendMode); UIKIT_EXTERN void UIRectFrame(CGRect rect); //这个方法用于裁剪当前图形上下文绘制区域...CGSizeMake(200, 200)); //获取到当前图形上下文 CGContextRef ref = UIGraphicsGetCurrentContext(); //裁剪其进行绘制尺寸为...c); //这个方法十分重要 其可以将图片裁剪成图形上下文定义形状 void CGContextClipToMask(CGContextRef cg_nullable c, CGRect rect,...CGImageRef cg_nullable mask); //获取裁剪区域尺寸 CGRect CGContextGetClipBoundingBox(CGContextRef cg_nullable...c); //进行区域裁剪 void CGContextClipToRect(CGContextRef cg_nullable c, CGRect rect); //进行一组区域裁剪 void CGContextClipToRects

2.6K20

iOS学习——Quartz2D学习之UIKit绘制

在前面我们学会了如何在自定义view中绘制文本信息,其实绘制图片方法绘制文本方法非常类似,所以基本步骤如下: 导入素材 在DrawRect加载图片  UIImage *image = [UIImage...drawAsPatternInRect:(CGRect *)rect:在指定rect区域内平铺图片,如果一张图片不够用,则会在剩下地方重新放置该图片,图片大小尺寸不会改变。...UIRectFill(rect);快速用矩形去填充一个区域 UIRectFrame(rect);快速绘制一个矩形边框  10、用UIKit裁剪一个区域 UIRectClip(CGRectMake...(0, 0, 50, 50));只要超出裁剪区域部分,都会被裁剪掉 这个方法必须要设置好裁剪区域,才能有裁剪 把它放到最后面,没有裁剪效果 //会填充整个rect区域,指定裁剪不会有效 UIRectClip...(CGRectMake(0, 0, 50, 50)); UIRectFill(rect); //只会填充指定裁剪区域,其他部分不会填充 UIRectFill(rect); UIRectClip(CGRectMake

1.5K20

iOS开发CoreGraphics核心图形框架之七——图像处理

在UIKit框架中也提供了方便接口供开发者进行CGImageRef与UIImage对象相互转换。    ...三、通过膜层来实现图像自定义裁剪     通过Mask膜层可以实现炫酷图像裁剪与风格重绘。...除了使用图片膜层来对原图像数据进行裁剪处理外,还可以通过颜色数据定义膜层来进行裁剪。这个方法就能加强大了,其可以将图像中某个范围颜色所对应所有区域裁剪出来。...对于被裁剪出来部分,开发者可以使用其他颜色进行填充,示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef contextRef = UIGraphicsGetCurrentContext...除了上面介绍了两种对图像进行裁剪方法外,CoreGraphics框架中还提供了一种裁剪方式,示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef

1.6K10

CALayer寄宿图

contentsScale属性其实属于支持高分辨率(Retina)屏幕机制一部分。...和bounds、frame不同,contentsRect不是按点来计算,而是使用单位坐标,单位坐标指定在0到1之间,是一个相对值(像素和点都是绝对值),所以contentsRect是相对于寄宿图尺寸而言...在标准设备上,一个点就是一个像素;但是在Retina屏幕上,按照不同屏幕尺寸,一个点可以表示一到多个像素。...UIImage是一个屏幕分辨率解决方案,所以它是用点来度量大小。...但是CGImage是使用像素来表示大小,所以如果不给layer设置contentsScale,那么它上面的图片就会展示原始像素大小,在Retina屏幕上会根据分辨率不同而展示出不同大小。

1K20

Swift3.1动画之Core Image

前言:Core Image是一个强大框架,可让您轻松地将过滤器应用于图像。您可以获得各种各样效果,修改活力,色调或曝光。...它可以从UIImage,从图像文件或从像素数据创建。 CIFilter。CIFilter类有一个字典,用于定义它所代表特定过滤器属性。过滤器例子是振动,颜色反转,裁剪等等。...更改过滤器值 下面增加滑块,每次滑块更改时,都需要使用不同值重做图像过滤器。但是,您不想重做整个过程,这将是非常低效,并且需要太长时间。...setValue(0, forKey:"inputSaturation") //4 cropping(to rect: CGRect)输出CIImage并将其作用到所提供rect...4、 cropping(to rect: CGRect)输出CIImage并将其作用到所提供rect。在这种情况下,您需要裁剪CIRandomGenerator过滤器输出,因为它无限制地打砖块。

1.4K80

SVG精髓阅读笔记

计算机中描述图形信息二大系统是栅格图形和矢量图形,在栅格图形系统中,图像被表示为图片元素或者像素长方形数组,每个像素用其RGB颜色值或者颜色表内索引表示,这一系列像素也称为位图....在矢量图形系统中,图像被描述为一系列几何形状,矢量图形阅读器接受在指定坐标集上绘制形状指令,而不是接受一系列已经计算像素.有人把矢量图形描述为一组绘图指令,而位图则是在特定位置填充颜色点....矢量图形用途:1:计算机辅助绘图,CAD,可以精确地测量和放大绘图以便查看细节非常重要,2:设计用于高分辨率打印图形程序, SVG特点:可缩放,不失真,无锯齿,或锯齿不明显. SVG文档: 属性viewBox宽高比可以不同于视口宽高比,在这种情况下SVG可以做三件事 1:按较小尺寸等比例缩放图形,以使图形完全填充视口, 2:按较大尺寸等比例缩放图形并裁剪掉超出视口部分...默认和evenodd 折线 不会自动闭合 当使用 和划线时,可以为stroke-linecap指定不同值来确定线头尾形状,可能取值为butt

1.4K20

iOS面试题-UI篇

UIView本身,更像是一个CALayer管理器,访问它跟绘图和坐标有关属性,frame,bounds等,实际上内部都是访问它所在CALayer相关属性 UIView有个layer属性,可以返回它主...CALayer实例,UIView有一个layerClass方法,返回主layer所使用类,UIView子类,可以通过重载这个方法,来让UIView使用不同CALayer来显示,: - (class...// 裁剪 CGContextClip(ctx); // 将图片画上去 [self drawInRect:rect];...能 因为UIScrollView内容尺寸是根据其内部内容来决定,所以是可以在viewDidLoad中设置 补充:(这仅仅是一种特殊情况) 前提,控制器B是控制器A一个子控制器,且控制器B内容只在控制器...因为任何控制器view在viewDidLoad时候尺寸都是不准确,如果有子控件尺寸依赖父控件尺寸,在这个方法中设置会导致子控件frame不准确,所以这时应该在下面的方法中设置子控件尺寸

1.9K21

YYImage 源码剖析:图片处理技巧

这时,若还使用常规方式加载会占用过多内存;况且,若图片像素过大(目前主流 iOS 设备最高支持 4096 x 4096 纹理尺寸),在显示时候 CPU 和 GPU 都会消耗额外资源来处理图片。...(originalImage, rect); UIImage *targetImage = [UIImage imageWithCGImage: tmpImage]; CGImageRelease(tmpImage...笔者有写过一个小东西,里面就使用了异步压缩和异步裁剪来处理超大图片:iOS图片浏览器(功能强大/性能优越) 二、YYImage 框架整体概览 上文中谈了一下图片处理一些原理和核心思想,做为背景知识,下面从一个宏观角度观察一下...scales为形为@[@1,@2,@3];数组,不同屏幕 物理分辨率/逻辑分辨率 不同,查询优先级也不同。 找到第一个有效path就会调用initWithData:scale:方法初始化。...五、YYSpriteSheetImage 类 SpriteSheet 动画,原理可以理解为一张大图上分布有很多完整小图,然后不同时刻显示不同位置小图。

1.3K41

六天完成一个简单iOS App - 第六天

// 裁剪 CGContextClip(ctx); // 绘制图片 [self drawInRect:rect]; // 获得图片 UIImage *image...cell高度计算 评论界面的cell使用是UITableViewAutomaticDimension自动计算高度,这样cell在添加约束时候需要额外小心,先来看一下评论cellxib 评论界面...label约束 同时在代码中需要设置cell高度自动计算,并且给cell一个大致估算高度 // 设置cell行高自动计算 自动计算尺寸 self.commentTableView.rowHeight...= 0; } 新帖模块完成 新帖模块页面和精华完全一样,只是请求数据不同,只需要让新帖控制器继承自精华控制器,请求数据时候对控制器类型进行判断,根据不同控制器设置不同请求参数即可。...= [view1 convertRect:rect fromView:view2]; // 让rect这个矩形框, 从view1坐标系转换到view2坐标系, 得出一个新矩形框newRect

1.3K50

小问题记录

、调用这个方法view2、view2所有子view都会调用layoutSubviews setFrame:只有在view设置frame且尺寸参数有不同情况下调用 滑动UIScrollView时,scrollView...frame:origin是相对于屏幕坐标,size就是其尺寸 bound: origin永远是(0,0),size也是尺寸 center: 是View中心点,但坐标是相对于屏幕。...如果需要相对自己中心点,则需要用bound.origin来计算 UIView加外边框 reference CGFloat borderWidth = 2.0f; self.frame = CGRectInset...locationInView) ) { // Point lies inside the bounds. } UIView调用presentViewController reference 自动布局下获取View尺寸...(context, [color CGColor]); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext

3.4K21

iOS卡顿优化

CPU:负责对象创建销毁、对象属性调整、布局计算、文本计算、和排版、图片格式转换和解码、图像绘制(Core Graphics)。 GPU:负责纹理渲染(将数据渲染到屏幕)。...屏幕显示过程:CPU计算显示内容,例如视图创建、布局计算、图片解码、文本绘制等;接着CPU将计算内容提交到GPU进行合成、渲染。...查找因重复执行导致卡顿方法,比如多个地方监听同一个通知,通知中执行多次清除缓存方法 保证后台运行时,不调用接口 把耗时操作放到子线程 文本处理(尺寸计算、绘制、CoreText和YYText)...GPU: 减少渲染 避免短时间内大量图片显示,尽可能将多张图片合成一张显示 GPU能处理最大纹理尺寸是4096*4096,一旦超过这个尺寸,就会占用CPU资源进行处理,所以纹理尽量不要超过这个尺寸...); // 裁剪 CGContextClip(ctx); // 将图片画上去 // [imageView drawRect:rect]; [imageView.image

3.3K11
领券