iOS8中怎样旋转和裁剪相片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS8中怎样旋转和裁剪相片相关的知识,希望对你有一定的参考价值。

ios8的拍照功能已经很强大了,其实在图片的处理方面也很强,当我们拍了相片想美化一下,iOS8中怎样旋转和裁剪相片呢?

【iOS8如何旋转并裁剪图片】

 1、进入“照片”应用后点击打开一张图片,再点击右上角“编辑”文字按钮。

2、进入编辑界面再点下方工具栏中的第二个按钮图标。

3。iOS8提供了一种新颖的图片旋转和裁剪的方式。按住四个角自由拖动可以实现不同自由的裁剪处理;而按住下方那个尺寸标注的三角形符号移动,则可以实现图片的旋转处理。

 4、如果点右下角的方形图标按钮,还可以用程序内置的尺寸比例,来等比例的截取。这样的尺寸比例常用于头像、寸照等处。

参考技术A iOS8不仅提供了全新的拍照功能,并且在图片的编辑处理方面也有不少功能优化。旋转和裁剪图片的操作在iOS8中就变得更加的容易。比如要对一张照片进行旋转和裁剪的美化处理,可按如下步骤进行: 步骤1:进入“照片”应用后点击打开一张图片,再点击右上角“编辑”文字按钮。 步骤2:进入编辑界面再点下方工具栏中的第二个按钮图标。 步骤3:iOS8为我们提供了一种新颖的图片旋转和裁剪的方式。按住四个角自由拖动可以实现不同自由的裁剪处理;而按住下方那个尺寸标注的三角形符号移动,则可以实现图片的旋转处理。 步骤4:而如果点右下角的方形图标按钮,还可以用程序内置的尺寸比例,来等比例的截取。这样的尺寸比例常用于头像、寸照等处。 查看原帖>>本回答被提问者采纳

如何从文件中旋转和裁剪 iOS CGImage

【中文标题】如何从文件中旋转和裁剪 iOS CGImage【英文标题】:How to rotate and crop iOS CGImage from file 【发布时间】:2015-08-11 15:11:29 【问题描述】:

我在 iOS 中的图像旋转遇到了一些问题。我正在应用程序的背景中执行一些图像处理......我想旋转和裁剪图像。目前,旋转似乎工作正常,但无论我尝试了什么,作物都关闭了。我在 GIMP 中执行了这些相同的操作,发现图像裁剪正确,所以我相信它与 Quartz 坐标系有关。此外,任一方向的弧度越大,作物就越“偏离”。这是我用来旋转和裁剪的代码:

+(UIImage*)imageWithImageFile:(NSString*)imageFile
                      radians:(float)radians
                    imageSize:(CGSize)imageSize
                croppedToRect:(CGRect)croppedToRect

    UIImage* returnImg = nil;
    @autoreleasepool 
        CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename([imageFile UTF8String]);
        CGImageRef image = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, YES, kCGRenderingIntentDefault);
        UIGraphicsBeginImageContext(croppedToRect.size);

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGContextSetShouldAntialias(context, YES);
        CGContextSetAllowsAntialiasing(context, YES);
        CGContextSetInterpolationQuality(context, kCGInterpolationHigh);

        CGContextTranslateCTM(context, imageSize.width * 0.5,
                              imageSize.height * 0.5);
        CGContextRotateCTM(context, radians);
        CGContextTranslateCTM(context, -imageSize.width * 0.5, -imageSize.height * 0.5);

        //Translate and scale upside-down to compensate for Quartz's inverted coordinate system
        CGContextTranslateCTM(context, 0.0, imageSize.height);
        CGContextScaleCTM(context, 1.0, -1.0);

        CGContextDrawImage(context, (CGRect) croppedToRect.origin, imageSize, image);
        returnImg = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();
        CGDataProviderRelease(dataProvider);
        CGImageRelease(image);
    

    return returnImg;

【问题讨论】:

【参考方案1】:

我相信这是解决方案:由于上下文的大小不同并且在原始图像中具有不同的原点,因此您必须偏移在上下文上“绘制”图像的点(对于你们这些更直观的人来说,画布人们)。您首先找到居中上下文的原点,然后将其与所需作物的原点进行比较。可以从上下文的中心点减去差异(或偏移量),这将偏移图像绘制的点。

    CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename([imageFile UTF8String]);
    CGImageRef image = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, YES, kCGRenderingIntentDefault);

    UIGraphicsBeginImageContext(croppedToRect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGPoint contextCenter = CGPointMake(croppedToRect.size.width * 0.5f,
                                          croppedToRect.size.height * 0.5f);
    CGPoint centerOfImage = CGPointMake(imageSize.width * 0.5f,
                                        imageSize.height * 0.5f);
    CGPoint contextOriginInImage = CGPointMake(centerOfImage.x - contextCenter.x,
                                        centerOfImage.y - contextCenter.y);
    CGPoint desiredOrigin = croppedToRect.origin;
    CGPoint offset = CGPointMake(desiredOrigin.x - contextOriginInImage.x,
                                 desiredOrigin.y - contextOriginInImage.y);
    CGContextTranslateCTM(context, contextCenter.x - offset.x, contextCenter.y - offset.y);
    CGContextRotateCTM(context, radians);
    CGContextScaleCTM(context, 1.0f, -1.0f);
    CGContextDrawImage(context, CGRectMake(-imageSize.width * 0.5f,
                                          -imageSize.height * 0.5f,
                                          imageSize.width,
                                          imageSize.height), image);
    returnImg = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    CGDataProviderRelease(dataProvider);
    CGImageRelease(image);

【讨论】:

以上是关于iOS8中怎样旋转和裁剪相片的主要内容,如果未能解决你的问题,请参考以下文章

iOS8:当手机旋转到横向时如何显示不同的视图控制器?

如何从文件中旋转和裁剪 iOS CGImage

裁剪和旋转 UIImagePickerController 选择的照片

横拍制作的视频,画面为啥是狭窄的?怎样才能显示出宽频效果?

旋转图像并裁剪黑色边框

旋转行为 iOS8 vs iOS9