在Swift中调整图片大小而不添加背景

8i9zcol2  于 2023-04-28  发布在  Swift
关注(0)|答案(1)|浏览(293)

thread中的每个解决方案都成功地调整了图像的大小 * 但是 * 调整了大小的图像有背景(黑色或白色取决于“UIGraphicsBeginImageContextWithOptions()”中的“不透明”bool设置为什么),即使原始图像没有。有没有一种方法可以在不添加背景的情况下调整图像的大小?
例如,公认的解决方案:

func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage? {
    let size = image.size

    let widthRatio  = targetSize.width  / size.width
    let heightRatio = targetSize.height / size.height

    // Figure out what our orientation is, and use that to form the rectangle
    var newSize: CGSize
    if(widthRatio > heightRatio) {
        newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
    } else {
        newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
    }

    // This is the rect that we've calculated out and this is what is actually used below
    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)

    // Actually do the resizing to the rect using the ImageContext stuff
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
    image.draw(in: rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
}

original image
resized image

sczxawaw

sczxawaw1#

通过“不添加背景”,我猜你的意思是你想在你的源图像中保持透明度,也就是保持alpa通道。您的原始图像是PNG。您调整大小的图像是JPG。
PNG图像可以包含Alpha通道。JPG图像不能。如果您将图像保存为JPG,则始终会丢失透明度。当您将文件保存到JPG时,您将失去透明度/添加背景。
这比你要求的要多得多,但我不久前写了一个演示应用程序,允许你屏蔽掉图像的一部分或取消屏蔽,然后将生成的图像保存到文件中。
您可以在此链接尝试该项目:
https://github.com/DuncanMC/MaskableImageView.git
顺便说一下,你应该使用UIGraphicsImageRenderer而不是UIGraphicsBeginImageContextWithOptions进行屏幕外渲染(我的演示应用程序展示了如何进行。)

相关问题