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