图片裁剪,左右超出了等距裁剪图片左右部分 上下超出了就等距裁剪图片上下部分

2023-05-16

+ (UIImage *)handleImage:(UIImage *)originalImage withSize:(CGSize)size

{

    

    CGSize originalsize = [originalImage size];

    NSLog(@"改变前图片的宽度为%f,图片的高度为%f",originalsize.width,originalsize.height);

    //原图长宽均小于标准长宽的,不作处理返回原图

    if (originalsize.width<size.width && originalsize.height<size.height)

    {

        return originalImage;

        

    }//原图长宽均大于标准长宽的,按比例缩小至最大适应值

    else if(originalsize.width>size.width && originalsize.height>size.height)

    {

        CGFloat rate = 1.0;

        CGFloat widthRate = originalsize.width/size.width;

        CGFloat heightRate = originalsize.height/size.height;

        

        rate = widthRate>heightRate?heightRate:widthRate;

        

        CGImageRef imageRef = nil;

        

        if (heightRate>widthRate)

        {

            imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height*rate/2, originalsize.width, size.height*rate));//获取图片整体部分

        }

        else

        {

            imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width*rate/2, 0, size.width*rate, originalsize.height));//获取图片整体部分

        }

        UIGraphicsBeginImageContext(size);//指定要绘画图片的大小

        CGContextRef con = UIGraphicsGetCurrentContext();

        

        CGContextTranslateCTM(con, 0.0, size.height);

        CGContextScaleCTM(con, 1.0, -1.0);

        

        CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);

        UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();

        NSLog(@"改变后图片的宽度为%f,图片的高度为%f",[standardImage size].width,[standardImage size].height);

        

        UIGraphicsEndImageContext();

        CGImageRelease(imageRef);

        

        return standardImage;

    }

    

    //原图长宽有一项大于标准长宽的,对大于标准的那一项进行裁剪,另一项保持不变

    else if(originalsize.height>size.height || originalsize.width>size.width)

    {

        CGImageRef imageRef = nil;

        

        if(originalsize.height>size.height)

        {

            imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(0, originalsize.height/2-size.height/2, originalsize.width, size.height));//获取图片整体部分

        }

        else if (originalsize.width>size.width)

        {

            imageRef = CGImageCreateWithImageInRect([originalImage CGImage], CGRectMake(originalsize.width/2-size.width/2, 0, size.width, originalsize.height));//获取图片整体部分

        }

        

        UIGraphicsBeginImageContext(size);//指定要绘画图片的大小

        CGContextRef con = UIGraphicsGetCurrentContext();

        

        CGContextTranslateCTM(con, 0.0, size.height);

        CGContextScaleCTM(con, 1.0, -1.0);

        

        CGContextDrawImage(con, CGRectMake(0, 0, size.width, size.height), imageRef);

        

        UIImage *standardImage = UIGraphicsGetImageFromCurrentImageContext();

        NSLog(@"改变后图片的宽度为%f,图片的高度为%f",[standardImage size].width,[standardImage size].height);

        

        UIGraphicsEndImageContext();

        CGImageRelease(imageRef);

        

        return standardImage;

    }

    

    //原图为标准长宽的,不做处理

    else

    {

        return originalImage;

    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图片裁剪,左右超出了等距裁剪图片左右部分 上下超出了就等距裁剪图片上下部分 的相关文章

随机推荐

  • Ubuntu安装Brave浏览器

    sudo curl x 34 http 127 0 0 1 8889 34 fsSLo usr share keyrings brave browser archive keyring gpg https brave browser apt
  • Android O HIDL框架

    HIDL简介 Android O开始 xff0c Google为了将framework和HAL层分割开来 xff0c 使得framework可以独立于HAL层更新 xff0c 设计了HIDL 有了HIDL xff0c HAL模块可以以一个独
  • Xfce 安装主题

    一 主题种类 xff08 一 xff09 gtk主题 窗口内的按钮和文本 xff0c 要在 外观 中的 样式 标签页设置 1 主题文件位置 xff1a 用户目录下 local share themes或者 themes xff0c 系统目录
  • Linux更改键位映射

    linux使用xmodmap管理键位映射 一 xmodmap xff08 一 xff09 语法格式 xmodmap 选项 filename xff08 二 xff09 选项 display host dpy X server to use
  • MySQL 建表 技巧

    1 create time 自动填写创建日期 xff0c update time 数据更新之后自动更新时间 使用DDL语句创建 CREATE TABLE 96 production info 96 96 id 96 int NOT NULL
  • Android 连接MySQL 并打包

    1 代码配置 2 打包选项配置 xff0c 一定是mono 43 net 4 x
  • HybridCLR 实战篇

    HybridCLR 实战篇 HybridCLR 是MIT开源的一个unity热更新打包方案 xff0c 该插件不像LUA和ILRuntime那样复杂 官方文档 xff1a https focus creative games github
  • Intellij IDEA中的撤销和回复撤销快捷键

    Intellij IDEA中 1 Ctrl 43 z是撤销快捷键 2 如果想恢复Ctrl 43 z 掉的内容 xff0c 按快捷键为 xff1a Ctrl 43 Shift 43 Z
  • linux zip文件解压命令详解

    文章转自 xff1a http www cnblogs com wangkongming p 4305962 html 1 把 home目录下面的mydata目录压缩为mydata zip zip r mydata zip mydata 压
  • mouse without borders win7安装不了

    mouse without borders 在win7安装的时候提示 Your computer span class hljs keyword has span span class hljs keyword not span been
  • 如何将git branch 和 commit id打印到内核log中?

    问题提出 xff1a 多项目多分支的开发模式中 xff0c 为了方便定位问题 xff0c 往往需要确认当前的问题日志对应的是哪个分支 xff0c 哪个提交 为了解决这个问题我们需要有一种方便的手段 解决方案 xff1a 首先想象的是是把gi
  • linux按进程名杀进程

    pkill 进程名 或是 killall 进程名 1 kill 9 ps ef grep 进程名关键字 gawk 0 grep print 2 tr s n 39 这个是利用管道和替换将 进程名对应的进程号提出来作为kill的参数 很显然上
  • IntelliJ IDEA中工具栏,功能区的显示和关闭

    点击 view xff0c 点击toolbar 显示工具栏 xff0c tool buttons 功能区tab 官人打赏 xff1a http blog csdn net assassinsshadow article details 76
  • chrome 删除厌烦的桔梗导航

    最近突然出现了让人非常厌恶的桔梗导航 xff0c 楼主找了写办法 xff0c 解决了这个bug xff08 程序员的骄傲 xff0c 虽然网上可能有人已经搞好了 xff09 我的系统是win10 1 开始菜单中找到chrome并打开文件位置
  • jetbrans rider 格式化代码时,{}不换行

    因为之前是写JAVA的 xff0c 所以对代码的格式优点洁癖 我希望看到的代码格式是这样的 span class hljs keyword private span span class hljs keyword void span spa
  • unity 设置物体不能被穿透

    墙壁box collider Is Trigger不勾选 cube xff0c rigidbody collision detection 设置为continuous dynamic
  • Docker实践笔记6:PHP容器制作

    容器介绍 此容器包含 PHP 7 3 和Nginx1 18环境 xff0c 用户可以自己使用Makefile 一键编译安装PHP环境 xff0c 也可以直接使用制作好的镜像运行项目 容器源码下载 git clone https github
  • GCD优化Tableview列表大图卡顿实用方法

    NSString filepath 61 xxxxx if NSFileManager defaultManager fileExistsAtPath filepath 异步加载图片 dispatch queue t queue 61 di
  • iOS 中通常加载 HTML 字符串

    有时候后台会返回多行文字 xff0c 其中文字中某写大小 xff0c 颜色需要特殊订制就会比较麻烦 xff0c 会用HTML 字符串返回给前台 假如后台返回的是responseData 64 34 activityMsg 34 这个 xff
  • 图片裁剪,左右超出了等距裁剪图片左右部分 上下超出了就等距裁剪图片上下部分

    43 UIImage handleImage UIImage originalImage withSize CGSize size CGSize originalsize 61 originalImage size NSLog 64 34