skip to Main Content

I am using the clearbit api to get and display company logos in my app. This works great except that all of the logos are different size, and I want them all to be displayed as a square.

Does anybody know how to take a rectangular image and add extra pixels to it of a given color until it becomes square with the logo at the center?

This question seemed to answer it, but it is outdated. I also thought that the top answer on this question would work, but the code didn’t work. Any help would be very much appreciated, thank you!

2

Answers


    1. ` func drawImageOnCanvas(_ useImage: UIImage, canvasColor: UIColor ) -> UIImage {

      let length = max(useImage.size.width, useImage.size.height)
      let canvasSize = CGSize.init(width: length, height: length)
      let rect = CGRect(origin: .zero, size: canvasSize)
      UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
      
      // fill the entire image
      canvasColor.setFill()
      UIRectFill(rect)
      
      // calculate a Rect the size of the image to draw, centered in the canvas rect
      let centeredImageRect = CGRect(x: (canvasSize.width - useImage.size.width) / 2,
                                     y: (canvasSize.height - useImage.size.height) / 2,
                                     width: useImage.size.width,
                                     height: useImage.size.height)
      
      // get a drawing context
      let context = UIGraphicsGetCurrentContext();
      
      // "cut" a transparent rectanlge in the middle of the "canvas" image
      context?.clear(centeredImageRect)
      
      // draw the image into that rect
      useImage.draw(in: centeredImageRect)
      
      // get the new "image in the center of a canvas image"
      let image = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()
      
      return image!
      

      }`

    2. ` func imageWithColor(color : UIColor,oriImage:UIImage) -> UIImage{

      let length = max(oriImage.size.width, oriImage.size.height)
      let size = CGSize.init(width: length, height: length)
      let imgView = UIImageView.init(image: oriImage)
      imgView.contentMode = UIView.ContentMode.scaleAspectFit
      imgView.backgroundColor = color
      imgView.bounds = CGRect.init(x: 0, y: 0, width: length, height: length)
      print("(size.width)" + "(size.height)")
      
      UIGraphicsBeginImageContext(size)
      guard let context = UIGraphicsGetCurrentContext() else{
          print("context get Error")
          return oriImage
      }
      imgView.layer.render(in:context)
      let desImg = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()
      
      return desImg ?? oriImage
      

      }`

    Login or Signup to reply.
  1. import UIKit
    
    extension UIImage {
        func scalePreservingAspectRatio(targetSize: CGSize) -> UIImage {
            // Determine the scale factor that preserves aspect ratio
            let widthRatio = targetSize.width / size.width
            let heightRatio = targetSize.height / size.height
            
            let scaleFactor = min(widthRatio, heightRatio)
            
            // Compute the new image size that preserves aspect ratio
            let scaledImageSize = CGSize(
                width: size.width * scaleFactor,
                height: size.height * scaleFactor
            )
    
            // Draw and return the resized UIImage
            let renderer = UIGraphicsImageRenderer(
                size: scaledImageSize
            )
    
            let scaledImage = renderer.image { _ in
                self.draw(in: CGRect(
                    origin: .zero, 
                    size: scaledImageSize
                ))
            }
            
            return scaledImage
        }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search