将UIImage的大小调整为200x200pt/px

swi*_*dan 78 uiimage ios swift

我一直在努力调整图像大小.基本上我已经弄明白了: 如何缩小UIImage并使其同时变得脆弱/锐利而不是模糊?

这似乎是一个合法的解决方案,但不知何故,它无法正常工作.

我的应用程序使用相机胶卷中的照片.这张照片应调整到大约200x200,而宽度很重要,而不是高度.

不幸的是,我没有示例代码,因为我在愤怒中放弃了关于非工作解决方案,对不起.

swi*_*dan 145

这是我的代码.图像宽度为850像素而不是200像素:

 func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage {

    let scale = newWidth / image.size.width
    let newHeight = image.size.height * scale
    UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight))
    image.drawInRect(CGRectMake(0, 0, newWidth, newHeight))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
}


@IBAction func chooseImage(sender: AnyObject) {


    var myPickerController = UIImagePickerController()
    myPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    myPickerController.delegate = self;
    self.presentViewController(myPickerController, animated: true, completion: nil)


}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])

{
    var imagenow = info[UIImagePickerControllerOriginalImage] as? UIImage

    imageImage.image = resizeImage(imagenow!, newWidth: 200)



    pimg2 = imageImage.image!

    cidnew2 = textFieldCID!.text!
    pname2 = textFieldName!.text
    pmanu2 = textFieldMan!.text
    pnick2 = textFieldNick!.text
    podate2 = textFieldPODate!.text
    pno2 = textFieldArtNo!.text



    self.dismissViewControllerAnimated(true, completion: nil)

}
Run Code Online (Sandbox Code Playgroud)

  • 在swift 4中工作:`func resizeImage(image:UIImage,newWidth:CGFloat) - > UIImage {let scale = newWidth/image.size.width let newHeight = image.size.height*scale UIGraphicsBeginImageContext(CGSize(width:newWidth,height) :newHeight))image.draw(in:CGRect(x:0,y:0,width:newWidth,height:newHeight))让newImage = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()返回newImage!}` (3认同)

小智 63

基于swift_dan的回答,Swift 3的更新

func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage? {

    let scale = newWidth / image.size.width
    let newHeight = image.size.height * scale
    UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))
    image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想在视网膜显示器中保存质量并保存透明,请使用:UIGraphicsBeginImageContextWithOptions(CGSize(width:newWidth,height:newHeight),false,0) (2认同)

Tra*_* M. 40

如果您正在处理包含透明胶片的PNG图像,则接受的答案功能实际上会将透明区域转换为黑色.

如果您希望缩放并保持透明胶片的位置,请尝试以下功能:

SWIFT 4

extension UIImage {
    func scaleImage(toSize newSize: CGSize) -> UIImage? {
        var newImage: UIImage?
        let newRect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height).integral
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
        if let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage {
            context.interpolationQuality = .high
            let flipVertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: newSize.height)
            context.concatenate(flipVertical)
            context.draw(cgImage, in: newRect)
            if let img = context.makeImage() {
                newImage = UIImage(cgImage: img)
            }
            UIGraphicsEndImageContext()
        }
        return newImage
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您还应该通过将UIImage init替换为:`let scale = UIScreen.main.scale let newImage = UIImage(cgImage:context.makeImage()!, scale:scale,orientation:.up)来考虑屏幕比例. (3认同)

Far*_*ruk 21

对于Swift 3.0

只需添加此代码段作为扩展名即可UIImage.但是,请记住,不会以正方形形式制作图像,但如果采用该形式,则结果将为方形.

extension UIImage {
    func resizeImage(newWidth: CGFloat) -> UIImage {

        let scale = newWidth / self.size.width
        let newHeight = self.size.height * scale
        UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))
        self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    } }
Run Code Online (Sandbox Code Playgroud)


abh*_*dal 10

Swift 4.0 -

如果您正在处理包含透明胶片的图像,则接受的答案功能实际上会将透明区域转换为黑色.

如果您希望缩放并保持透明胶片的位置,请尝试以下功能:

func resizeImageWith(image: UIImage, newSize: CGSize) -> UIImage {

    let horizontalRatio = newSize.width / image.size.width
    let verticalRatio = newSize.height / image.size.height

    let ratio = max(horizontalRatio, verticalRatio)
    let newSize = CGSize(width: image.size.width * ratio, height: image.size.height * ratio)
    var newImage: UIImage

    if #available(iOS 10.0, *) {
        let renderFormat = UIGraphicsImageRendererFormat.default()
        renderFormat.opaque = false
        let renderer = UIGraphicsImageRenderer(size: CGSize(width: newSize.width, height: newSize.height), format: renderFormat)
        newImage = renderer.image {
            (context) in
            image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        }
    } else {
        UIGraphicsBeginImageContextWithOptions(CGSize(width: newSize.width, height: newSize.height), isOpaque, 0)
        image.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
    }

    return newImage
}
Run Code Online (Sandbox Code Playgroud)

  • 使用未解析的标识符'isOpaque' (3认同)

Ras*_*hid 7

此函数将返回指定宽度的图像:

func scaleImage(image: UIImage, maximumWidth: CGFloat) -> UIImage {
    let rect: CGRect = CGRectMake(0, 0, image.size.width, image.size.height)
    let cgImage: CGImageRef = CGImageCreateWithImageInRect(image.CGImage!, rect)!
    return UIImage(CGImage: cgImage, scale: image.size.width / maximumWidth, orientation: image.imageOrientation)
}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

func scaledImage(_ image: UIImage, maximumWidth: CGFloat) -> UIImage {
    let rect: CGRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
    let cgImage: CGImage = image.cgImage!.cropping(to: rect)!
    return UIImage(cgImage: cgImage, scale: image.size.width / maximumWidth, orientation: image.imageOrientation)
}
Run Code Online (Sandbox Code Playgroud)


rom*_*mex 7

此代码使用iOS 10中引入的UIGraphicsImageRenderer:在我的测试中,它比使用UIGraphicsBeginImageContext(Swift 4/Xcode 9)的早期样本快10-40%:

extension UIImage {
        func renderResizedImage (newWidth: CGFloat) -> UIImage {
            let scale = newWidth / self.size.width
            let newHeight = self.size.height * scale
            let newSize = CGSize(width: newWidth, height: newHeight)

            let renderer = UIGraphicsImageRenderer(size: newSize)

            let image = renderer.image { (context) in
                self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
            }
            return image
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

该代码在方形图像上效果很好,并且不会损失质量

extension UIImage {

func resize(targetSize: CGSize) -> UIImage {
    return UIGraphicsImageRenderer(size:targetSize).image { _ in
        self.draw(in: CGRect(origin: .zero, size: targetSize))
    }
}

}
Run Code Online (Sandbox Code Playgroud)

答案来自: 在不损失质量的情况下调整图像大小


归档时间:

查看次数:

81445 次

最近记录:

6 年,2 月 前