Image Border

最近在给自己写一个 iOS 应用,快捷地进行照片的「加框」动作。大部分现有的应用,无法实现期望的比例,又或者是太重,功能太多。所以基本都是通过 PhotoShop 去处理的,之后再 AirDrop 到手机。期望是在不改变原图片的质量下,以 4x5,或是 5x4 的比例进行加框。

至于加框的目的,主要还是为了在 Instagram 列表上有更好的呈现效果。下面是对比图:

Border Info

从视觉上看,左边的这个版面要舒服得多,整体也会更大一点,右边是一般的应用的常规加框逻辑,上下不留白,显得比较狭窄而局促。

关键代码是一个 UIImageextension,大致如下:

func applyBorder(borderWidth: CGFloat, borderColor: UIColor) -> UIImage? {
    let newWidth  = Int(self.size.width + 2 * borderWidth)
    let newHeight = Int(self.size.height + 2 * borderWidth)
    let imageRect = CGRect(x: borderWidth, 
                           y: borderWidth, 
                           width: self.size.width, 
                           height: self.size.height)
    UIGraphicsBeginImageContext(CGSize(width:newWidth, height: newHeight))
    let ctx = UIGraphicsGetCurrentContext()
    ctx!.saveGState()
    ctx!.setFillColor(color.cgColor)
    ctx!.fill(CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
    ctx!.restoreGState()
    self.draw(in: imageRect)
    let img = UIGraphicsGetImageFromCurrentImageContext();
    return img;
}