UIImage:调整大小,然后裁剪

2024-01-19

几天来,我一直在努力解决这个问题,尽管我一直觉得自己正处于启示的边缘,但我根本无法实现我的目标。

在设计的概念阶段之前,我认为从 iPhone 的相机或库中抓取图像,使用相当于宽高比填充UIImageView 的选项(完全在代码中),然后crop off任何不适合传递的 CGRect 的内容。

从相机或库获取原始图像是微不足道的。我对另外两步被证明是多么困难感到震惊。

附图显示了我想要实现的目标。请有人好心握住我的手吗?到目前为止,我发现的每个代码示例似乎都破坏了图像,上下颠倒,看起来像垃圾,绘制超出范围,或者只是无法正常工作。


我需要同样的东西 - 就我而言,选择缩放后适合的尺寸,然后裁剪每一端以使其余部分适合宽度。 (我正在横向工作,所以可能没有注意到纵向模式的任何缺陷。)这是我的代码 - 它是 UIImage 类别的一部分。我的代码中的目标尺寸始终设置为设备的全屏尺寸。

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
    UIImage *sourceImage = self;
    UIImage *newImage = nil;    
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor > heightFactor) 
        {
            scaleFactor = widthFactor; // scale to fit height
        }
        else
        {
            scaleFactor = heightFactor; // scale to fit width
        }

        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;

        // center the image
        if (widthFactor > heightFactor)
        {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        }
        else
        {
            if (widthFactor < heightFactor)
            {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
        }
    }   

    UIGraphicsBeginImageContext(targetSize); // this will crop

    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
    {
        NSLog(@"could not scale image");
    }

    //pop the context to get back to the default
    UIGraphicsEndImageContext();

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

UIImage:调整大小,然后裁剪 的相关文章

  • 选择 UITableViewCell 时 UIView 背景颜色消失

    我在界面生成器中构建了一个简单的 tableViewCell 它包含一个包含图像的 UIView 现在 当我选择单元格时 会显示默认的蓝色选择背景 但 UIView 的背景颜色消失了 我的 UITableViewCell 的实现文件没有做任
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 在 UITextView 中获取 HTML

    我在中显示htmlUITextView by self textView setValue b Content b forKey contentToHTMLString 编辑内容后UITextView 我想获取包含 html 的内容 所以我
  • 如何区分 iTunes Connect / Apple TestFlight 上的 STAGE 和 PRODUCTION 版本?

    阶段构建与阶段服务器的对话 阶段服务器与生产服务器尽可能相同 以用于测试目的 生产构建与生产服务器的通信 生产服务器存储真实的关键数据 这些构建本质上是针对同一应用程序的 但是 iTunes Connect 界面将向您显示以下内容 即构建由
  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • 在 UITableViewController 中重新排序行后 UI 更新不正确

    因此 我对表中的行重新排序 用户界面最终结果不正确 场景如下 表内容原文 a b c d e 如果我移动第 0 行 当前a 到第 4 行 当前e 我看到的最终结果是 c d e a a 一些背景 该表正在读取 Realm 对象的列表 我确认
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 如何检索 iPhone 的区域设置

    我用谷歌搜索过它 但令我有点惊讶的是我找不到它 我只想访问设备配置的区域设置 我试图找到如何列出所有系统属性 以防我能在那里找到区域设置 但甚至找不到如何做到这一点 我知道 认为 我之前检索过系统属性 但我也记得在谷歌搜索时找到该信息并不容
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • 领域:结果 和列表

    是否可以转换Results
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 从plist文件中读取数据

    我正在尝试为我的 iPhone 应用程序实现保存状态 我有一个名为 SaveData plist 的 plist 文件 我可以通过以下方式读取它 NSString pListPath2 bundle pathForResource Save
  • 游戏中心邀请处理程序,它属于哪里?

    我已经搜索了该网站并发现了这个 GameCenter 邀请处理程序 https stackoverflow com questions 4639284 gamecenter invitation handler He says 正如文档中所

随机推荐

  • 必填字段验证器未触发

    我在使用具有 TextBox 和 requiredFieldValidator 的标准 ASP NET 页面时遇到问题 重现的步骤非常简单 在页面上放置一个文本框 在页面上放置一个RequiredFieldValidator 将Requir
  • 如何使 Tab 页的宽度适合 TabControl 的宽度

    我有一个带有两个选项卡页的 TabControl 如何使选项卡页适合 TabControl 的宽度 如下面的屏幕截图所示 我尝试使用以下代码行 但它也不起作用 tabControl1 SizeMode TabSizeMode FillToR
  • Java:检测变量是字符串还是整数

    我正在为我的一些家庭作业寻求一些帮助 我希望用户输入一个数字字符串 然后将其转换为整数 但我想创建一个循环来检测用户是否输入了错误的值 例如 一百 而不是 100 我的想法是做这样的事情 do numStr JOptionPane show
  • Swift 对具有多个排序标准的数组进行排序[重复]

    这个问题在这里已经有答案了 Swift 中如何按多个条件对数组进行排序 例如 字典数组如下所示 items item itemA status 0 category B item itemB status 1 category C item
  • 使用自定义图标进行 Google 地图标记定位

    我遇到一个问题 带有自定义图标的标记似乎显示在地图上略有不同的点 具体取决于缩放级别 我以前使用过带有自定义图标的标记 所以我不知道我做错了什么 您会看到 最初标记看起来像是位于道路上 但如果缩小两次 它看起来就像在上面 如果放大两次 它看
  • GAE Blobstore 类文件 API 弃用时间表(py 2.7 运行时)

    这是 App Engine 团队的问题 上周我们意识到 App Engine 团队已将用于写入和读取 blobstore 的类文件 API 标记为已弃用 并且将来可能会被删除 我们有相当多的基础设施依赖于该 API 现在我们需要移植到他们建
  • 在python 3.6中导入tensorflow时出现非法指令:4

    我安装了macOS 上的张量流 https www tensorflow org install install mac使用 Virtualenv 一切顺利 成功安装了 6 1 11 0 tensorflow 1 6 0 是终端的最后一个输
  • 尝试呈现一个 UIViewController,其视图不在窗口层次结构中

    我有一个具有以下层次结构的多视图应用程序 启动 gt 导航控制器 gt 表视图控制器 gt 设置视图控制器 Splash 是应用程序入口点 因此成为根视图控制器 当我尝试通过设置视图控制器上的操作将图块添加到带区时 我收到调试器警告 app
  • 传单 GeoJSON 显示

    我遇到了一个任务 需要使用 leaflet js 库和 geojson 作为数据存储 几乎立即 遇到了以下问题 从 geojson 对象创建的多边形不显示在地图上 而由本机传单方法创建的多边形则完美地工作 这是我的代码 var map ne
  • 自编译 Roslyn 构建性能:不如最初发布的 Roslyn 版本快

    用一句话来形容我在做什么 检查分支Update 1来自罗斯林 github 存储库 https github com dotnet roslyn git 构建 csc exe 并使用我刚刚自己构建的 csc exe 版本编译随机解决方案 预
  • Pandas 的 ValueError - 传递值的形状

    我正在尝试使用 Pandas 和 PyODBC 从 SQL Server 视图中提取内容并将内容转储到 Excel 文件中 但是 在转储数据帧时出现错误 我可以打印列和数据帧内容 ValueError Shape of passed val
  • Eclipse 中的调试:无断点的变量快照

    我正在 Eclipse 中调试 Java 程序 我想观察一个特定的变量 但是 由于我的程序使用 GUI 因此创建断点会导致窗口冻结 例如 这尤其令人烦恼 尝试右键单击某个项目并导航上下文菜单 我实际上并不想停止程序 我只是想观察一个特定的变
  • 页面加载时使用 AJAX 不是一件坏事吗?

    我在上面看到过这个书呆子晚餐 http nerddinner codeplex com和其他网站 页面加载时 在 JavaScript 中 通过浏览器 将发出 AJAX 请求 从呈现初始页面的同一服务器获取一些数据 数据会很小 并且不存在会
  • AnyDac 又名 FireDac 无法生成更新查询

    我已经使用 UniDac 很长时间了 决定转向 FireDac 因为它具有良好的异步方法 在继续使用后 我发现我的数据编辑不再起作用 它给了我一个错误 FireDAC 物理 330 无法生成更新查询 更新表未定义 我在这里想做的是我有一个
  • Spring单例和Java单例(设计模式)有什么区别? [复制]

    这个问题在这里已经有答案了 我正在学习 Spring 框架 目前正在阅读一本关于它的书 这本书里说Spring单例与Java单例不同 这意味着什么以及有什么区别 谢谢 Java 单例的作用域是 Java 类加载器 Spring 单例的作用域
  • 严重:泄漏:在垃圾收集之前未调用 ByteBuf.release()。内蒂

    我已经创建了一些游戏服务器 并且刚刚与大约 10 个伙伴进行了测试 一切都很顺利 我们玩了大约 10 分钟 在游戏的某个时刻 游戏服务器停止为客户端提供服务 断开了每个人的连接 而且我连接到运行游戏的 VPS 的 SSH 也断开了连接 我不
  • Excel VBA 函数检查文件名是否包含该值

    我需要一个可以输出如下内容的公式 如果特定文件夹中的文件名包含 因为文件名在 字符后会有一个附加字符串 因此如果文件名包含单元格值 AB1 则在单元格 AC1 中添加完整文件名 用VBA可以实现吗 非常感谢 这在VBA中可行吗 当然 这是我
  • 如何反序列化 ArrayObject

    Note 我尝试过使用反序列化函数 但它说第一个参数应该是字符串而不是对象 所以我的问题 Q 如何在 php 中反序列化 ArrayObject 我的 ArrayObject 包含 O 11 ArrayObject 2 s 14 shopp
  • 将 WebKit 用于桌面应用程序 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • UIImage:调整大小,然后裁剪

    几天来 我一直在努力解决这个问题 尽管我一直觉得自己正处于启示的边缘 但我根本无法实现我的目标 在设计的概念阶段之前 我认为从 iPhone 的相机或库中抓取图像 使用相当于宽高比填充UIImageView 的选项 完全在代码中 然后cro