Ez a kérdés, úgy tűnik fel, hogy pihenni, de az én törekvés egy megoldás, hogy én is könnyebben megértsék (és írt Swift), én megérkezett a (szintén kiküldött: Hogyan levágásához UIImage? )
Azt akartam, hogy képes kivágni egy régió alapján a képarány és a skála a mérete alapján egy külső térelhatároló mértékben. Itt van a variáció:
import AVFoundation
import ImageIO
class Image {
class func crop(image:UIImage, crop source:CGRect, aspect:CGSize, outputExtent:CGSize) -> UIImage {
let sourceRect = AVMakeRectWithAspectRatioInsideRect(aspect, source)
let targetRect = AVMakeRectWithAspectRatioInsideRect(aspect, CGRect(origin: CGPointZero, size: outputExtent))
let opaque = true, deviceScale:CGFloat = 0.0 // use scale of device's main screen
UIGraphicsBeginImageContextWithOptions(targetRect.size, opaque, deviceScale)
let scale = max(
targetRect.size.width / sourceRect.size.width,
targetRect.size.height / sourceRect.size.height)
let drawRect = CGRect(origin: -sourceRect.origin * scale, size: image.size * scale)
image.drawInRect(drawRect)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
}
Van egy pár dolog, amit találtam zavaró, a különböző aggályok a vágási és átméretezés. Levágás kezeljék az eredete a len, hogy adja át a drawInRect és skálázás kezeli a méret rész. Az én esetemben, szükséges, hogy kapcsolódnak a méret a vágás rect a forrás, az én kimenő len azonos képarányú. A skála faktort ezután kimenet / bemenet, és ezt kell alkalmazni a drawRect (átadott drawInRect).
Egy kikötés az, hogy ez a megközelítés hatékonyan feltételezi, hogy a képet rajzolt nagyobb, mint a kép összefüggésében. Én még nem tesztelték ezt, de azt hiszem, akkor használja ezt a kódot kell kezelni vágás / nagyítás, de kifejezetten meghatározó skálaparaméter hogy a fent említett skála paraméter. Alapértelmezésben UIKit érvényes szorzó alapján a képernyő felbontását.
Végül meg kell jegyezni, hogy ez a megközelítés UIKit magasabb szinten CoreGraphics / kvarc és Core Image megközelítéseket, és úgy tűnik, hogy kezelni képtájolást kérdéseket. Azt is érdemes megemlíteni, hogy ez elég gyors, a második, hogy ImageIO szerint ezt a bejegyzést itt: http://nshipster.com/image-resizing/