2016-11-02 1 views
0

Si le titre n'est pas clair, ouvrez l'application Photos sur votre iPhone et modifiez une image. Essayez l'outil de rotation. Le cadre ne pivote pas, seule l'image le fait et effectue un zoom avant pour rester dans le cadre.Swift - Faites pivoter une image, puis effectuez un zoom avant et recadrez pour conserver le rapport largeur/hauteur intact.

Voici une photo de ceci:

Rotation photo app tool

Je voudrais copier ce projet dans mon comportment Swift. Cela signifie tourner une image (il peut s'agir de UIImage, CIImage ou CGImage) mais recadrer en conservant le même rapport largeur/hauteur.

Où dois-je commencer? Merci pour votre temps.

Répondre

1

Il y a un filtre pour cela. CIStraightenFilter fait tourner une image par une quantité tout en étirant et de culture pour maintenir les dimensions d'origine:

let image: CIImage = /* my image 480x320 */ 
let rotated = image.applyingFilter("CIStraightenFilter", 
    withInputParameters: [ kCIInputAngleKey: Double.pi/6 ]) // 30 degrees 
rotated.extent // still 480x320 

Voici quelques exemples (rotations de zéro, 15 °, 30 ° et 45 °):

no rotation rotate by π/12 (15 degrees) rotate by π/6 (30 degrees) rotate by π/4 (45 degrees)

+0

Merci, il fonctionne bien! Je ne savais pas à propos de ce filtre. J'ai ajouté cette ligne de code pour créer une CGImage si quelqu'un en a besoin: | let cgImage = context.createCGImage (pivoté, à partir de: rotated.extent) | – Moon