skip to Main Content

I have an image, by example width: 1000, height: 2000

If I crop (or trim) this image by delete the last 500 pixels of the bottom, the result is an image of 1000 X 1500 pixels.

I would like to have a final image of 1000 X 2000 pixels, with the last 500 bottom pixels transparents.

Any help on this is really appreciated

2

Answers


  1. func cropImage(uiImage: UIImage) -> Image {
            guard let cgImage = uiImage.cgImage else {return Image("CameraGuid")}
            let sideLength = min(
                uiImage.size.width,
                uiImage.size.height
            )
            let sourceSize = uiImage.size
            let xOffset = (sourceSize.width - sideLength) / 2.0
            let yOffset = (sourceSize.height/2) - (sourceSize.height / 6)
            
            let height = ((sourceSize.height/2) + (sourceSize.height / 6)) - yOffset
            let cropRect = CGRect(
                x: xOffset,
                y: yOffset,
                width: sideLength,
                height: height
            ).integral
            let croppedCGImage = cgImage.cropping(
                to: cropRect
            )!
            let draft = UIImage(cgImage: croppedCGImage)
            return Image(uiImage: draft)
        }
    
    Login or Signup to reply.
  2. You can use an extension like this:

    extension UIImage {
        func clearRect(_ r: CGRect) -> UIImage {
            let renderer = UIGraphicsImageRenderer(size: size)
            let image = renderer.image { (context) in
                // draw the full image
                draw(at: .zero)
                let pth = UIBezierPath(rect: r)
                context.cgContext.setFillColor(UIColor.clear.cgColor)
                context.cgContext.setBlendMode(.clear)
                // "fill" the rect with clear
                pth.fill()
            }
            return image
        }
    }
    

    Then to turn the "bottom 500 pixels" transparent, call it like this:

    // make sure we have an image
    guard let img = UIImage(named: "image1000x2000") else {
        fatalError("Could not load image!")
    }
        
    // create a new UIImage with the bottom 500 transparent
    let newImg = img.clearRect(CGRect(x: 0, y: 1500, width: 1000, height: 500))
        
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search