项目中要求处理图片, 简单记录一下图片旋转和裁剪过程

/** 将图片旋转弧度radians */
- (UIImage *)imageRotatedByRadians:(CGFloat)radians
{
    // calculate the size of the rotated view's containing box for our drawing space
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
    CGAffineTransform t = CGAffineTransformMakeRotation(radians);
    rotatedViewBox.transform = t;
    CGSize rotatedSize = rotatedViewBox.frame.size;
    
    // Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();
    
    // Move the origin to the middle of the image so we will rotate and scale around the center.
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
    
    //   // Rotate the image context
    CGContextRotateCTM(bitmap, radians);
    
    // Now, draw the rotated/scaled image into the context
    CGContextScaleCTM(bitmap, 1.0, -1.0);
    CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}

#pragma mark - 截取当前image对象rect区域内的图像
- (UIImage *)subImageWithRect:(CGRect)rect
{
    CGImageRef newImageRef = CGImageCreateWithImageInRect(self.CGImage, rect);
    
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
    
    CGImageRelease(newImageRef);
    
    return newImage;
}

#pragma mark - 压缩图片至指定尺寸
- (UIImage *)rescaleImageToSize:(CGSize)size
{
    CGRect rect = (CGRect){CGPointZero, size};
    
    UIGraphicsBeginImageContext(rect.size);
    
    [self drawInRect:rect];
    
    UIImage *resImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return resImage;
}

#pragma mark - 压缩图片至指定像素
- (UIImage *)rescaleImageToPX:(CGFloat )toPX
{
    CGSize size = self.size;
    
    if(size.width <= toPX && size.height <= toPX)
    {
        return self;
    }
    
    CGFloat scale = size.width / size.height;
    
    if(size.width > size.height)
    {
        size.width = toPX;
        size.height = size.width / scale;
    }
    else
    {
        size.height = toPX;
        size.width = size.height * scale;
    }
    
    return [self rescaleImageToSize:size];
}

一些处理UIImage相关的category: https://github.com/wyon0313/UIImageCategory

iOS 图片处理-图片旋转和裁剪相关推荐

  1. Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片

    关于Fresco加载图片的处理,例如旋转.裁剪切割图片,在官方文档也都有提到,只是感觉写的不太详细,正好最近项目里有类似需求,所以分享一些使用小tip,后面的朋友就不用再走弯路浪费时间了.(测试图片分 ...

  2. iOS之实现图片裁剪的几种方式

    iOS之实现图片裁剪的几种方式 1.使用CGImageCreateWithImageInRect函数 CGImageCreateWithImageInRect函数是属于Core Graphics Fr ...

  3. 解决ios横屏拍照图片自动旋转90度问题

    解决ios横屏拍照图片自动旋转90度问题 参考文章: (1)解决ios横屏拍照图片自动旋转90度问题 (2)https://www.cnblogs.com/lanshengzhong/p/900856 ...

  4. iOS transform解决连续多次旋转缩放,实现图片旋转缩放效果

    一.需求 实现imageView的缩放旋转效果,一般有两种方式: 1.底层加scrollview,利用scrollview的属性实现.(推荐这种,这是我比较后发现的,手势做缩放旋转会有点弊端) 2.利 ...

  5. iOS 对Image图片本身进行旋转0,90,180,270

    对图片本身进行旋转 + (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation {long double ...

  6. java 图片合成 工具类_Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】...

    本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望: ...

  7. php图片特效,php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法

    本文实例讲述了php_imagick实现图片剪切.旋转.锐化.减色或增加特效的方法.分享给大家供大家参考.具体分析如下: 一个可以供PHP调用ImageMagick功能的PHP扩展.使用这个扩展可以使 ...

  8. torchvision.transforms 的CenterCrop():在图片的中间区域进行裁剪

    pytorch中transform函数 torchvision.transforms是pytorch中的图像预处理包 一般用Compose把多个步骤整合到一起: 比如说 transforms.Comp ...

  9. 【精心挑选】10款基于 jQuery 的图片360度旋转插件

    之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...

最新文章

  1. Django博客系统(忘记密码)
  2. Jenkins安装与配置
  3. node进程管理——pm2
  4. 如何修改浏览器服务器时间格式,浏览器模式怎么改模式
  5. 如何在mysql中添加复选框_如何使用输入和复选框更新mysql
  6. 观察者模式在android网络监控下的运用
  7. 变身抓重点小能手:机器学习中的文本摘要入门指南 | 资源
  8. 一步一步SharePoint 2007之二十二:完美解决实现Form认证后无法再用SharePoint Designer编辑网站的问题...
  9. ubuntu 学习笔记2--安装tomcat
  10. Dijkstra算法求最短路径(附leetcode 743 网络延迟问题)
  11. Lua中local变量和非local变量的区别
  12. Akka和Actor一起工作的消息《ten》译
  13. HTML的字体10种酷炫效果
  14. 两年工作经验,三面拼多多,最终获得offer!(面经总结)
  15. 人类杏仁核的核团:手动分割到自动图谱
  16. 新零售到家O2O 和到店O2O的区别?
  17. 让老照片重现光彩(三):完整论文的中文译文
  18. 计算机毕业设计项目推荐 - 毕设开题选题
  19. 关于 Java 的简介(评论抽奖送书)
  20. 使用ssh正向连接、反向连接、做socks代理的方法

热门文章

  1. iis7下站点日志默认位置
  2. 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
  3. 《转》Python学习(14)-对文件的操作(一)
  4. [JavaWeb基础] 007.Struts2的配置和简单使用
  5. 关于程序员的政治(转)
  6. Linux创建指定用户特定指定目录权限
  7. PHP使用curl_multi_add_handle并行处理
  8. php调用C代码的方法详解
  9. C#调用windows api的要点
  10. ASP.NET2.0 GridView小技巧汇粹