用比例绘制 UIImage 并平移

Posted

技术标签:

【中文标题】用比例绘制 UIImage 并平移【英文标题】:Draw UIImage with scale and translate 【发布时间】:2020-09-13 19:12:14 【问题描述】:

我正在尝试绘制 UIImage 的“放大”部分,但找不到这样做的方法...

假设我有一个大小为 1000x1000 的图像,我放大到左上角(x:0,y:0 宽度:500,高度:500),我想将该部分绘制到另一个 1000x1000 图像中。

我正在使用UIGraphicsImageRenderer,但 UIImage draw 方法不接受任何矩形,只接受目标矩形(它会绘制整个图像)。

我可以通过在 draw 方法中指定更大的矩形来实现我想要的,但是当放大级别很大(内存不足)时会崩溃。

这是我尝试过的:

let srcImg: UIImage = some UIImage sized 1000x1000
let renderer = UIGraphicsImageRenderer(size: CGSize(width: 1000, height: 1000))
let scaled = renderer.image  ctx in
    srcImg.draw(in: CGRect(origin: CGPoint.zero, size: CGSize(width: 2000, height: 2000)))

基本上,我正在尝试实现类似于 html5 画布的 drawImage API 的东西,它同时获取 src 和 dst 矩形...

谢谢。

【问题讨论】:

【参考方案1】:

使用此答案中的UIImage 扩展名:https://***.com/a/28513086/6257435

如果我正确理解您的问题 - 您想从 1000x1000 图像中剪切左上角的 500x500 像素,并将其缩放到 1000x1000 - 这是一个使用该扩展程序的简单示例:

    if let img1000x1000 = UIImage(named: "img1000x1000") 
        if let topLeft500x500 = img1000x1000.cropped(to: CGRect(x: 0, y: 0, width: 500, height: 500)) 
            if let new1000x1000 = topLeft500x500.filled(to: CGSize(width: 1000, height: 1000)) 
                // do something with new 1000x1000 image
                print()
            
        
    

【讨论】:

以上是关于用比例绘制 UIImage 并平移的主要内容,如果未能解决你的问题,请参考以下文章

绘制文本并添加到 UIImage iOS 5/6

绘制 UIView 并转换为 UIImage

使用平移、旋转和捏合手势编辑后如何保存 UIImage

从iphone中的固定宽度找到UIImage的比例高度

将大 UIImage 比例下载到 UIImageView

在 UIImage 上绘制文本