如何从 UIWebView 获取整个图像,包括屏幕外内容

2023-12-01

我有一种方法可以从 iOS 应用程序中的各种视图获取图像,以便用户通过电子邮件发送屏幕。我绘制的大多数屏幕都工作正常,但是当我将这种技术与 UIWebView 一起使用时,我只能获得屏幕的可见部分。屏幕外的任何内容都不包含在渲染图像中。一直在 Stack 上挖掘,但到目前为止我还没有发现任何有用的东西?!

这是我目前使用的方法:

-(NSData *)getImageFromView:(UIView *)view
{
    NSData *pngImg;
    CGFloat max, scale = 1.0;
    CGSize size = [view bounds].size;

    // Scale down larger images else we run into mem issues with mail widget
    max = (size.width > size.height) ? size.width : size.height;
    if( max > 960 )
        scale = 960/max;

    UIGraphicsBeginImageContextWithOptions( size, YES, scale );

    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];    
    pngImg = UIImagePNGRepresentation( UIGraphicsGetImageFromCurrentImageContext() );

    UIGraphicsEndImageContext();    
    return pngImg;
}

哇,答案非常简单……正在到处寻找各种打印/PDF 相关的东西……然后我突然想到,为什么不将上下文中的视图设置为 sizeThatFits。有效!

警告:不能保证您不会遇到内存问题,我建议您在 @autoreleasepool 池中执行此操作,并考虑像我在示例中所做的那样进行一些扩展,但这可行,并且是我所决定的:

-(NSData *)getImageFromView:(UIView *)view  // Mine is UIWebView but should work for any
{
    NSData *pngImg;
    CGFloat max, scale = 1.0;
    CGSize viewSize = [view bounds].size;

    // Get the size of the the FULL Content, not just the bit that is visible
    CGSize size = [view sizeThatFits:CGSizeZero];

    // Scale down if on iPad to something more reasonable
    max = (viewSize.width > viewSize.height) ? viewSize.width : viewSize.height;
    if( max > 960 )
        scale = 960/max;

    UIGraphicsBeginImageContextWithOptions( size, YES, scale );

    // Set the view to the FULL size of the content.
    [view setFrame: CGRectMake(0, 0, size.width, size.height)];

    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];    
    pngImg = UIImagePNGRepresentation( UIGraphicsGetImageFromCurrentImageContext() );

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

如何从 UIWebView 获取整个图像,包括屏幕外内容 的相关文章

  • 在 Pages 文稿中打开文本—Swift

    在我的 Swift 2 应用程序中 用户通过文本字段创建一串文本 然后将其共享给另一个应用程序 现在 我只能将文本共享为 txt 文件 这不提供选项Open In Pages当我打开系统共享对话框时 如何才能让用户可以选择将输入的文本作为
  • Swift:如何让游戏中的角色只有落地后才能跳跃?

    我正在开发一款游戏 我的角色可以从一个陆地跳到另一个陆地 我已经把所有事情都做好了 除了我剩下的问题是 如果你继续点击屏幕 他可以永远跳跃 我希望他必须先落地才能再次跳跃 import SpriteKit import GameplayKi
  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • iOS 何时清理本地应用程序 ./tmp 目录?

    iOS什么时候清理本地应用程序 tmp目录 请注意 这不是一个骗局这个问题 https stackoverflow com questions 3593900 iphone storage in tmp directory 我问的是应用程序
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 单击按钮时退出应用程序 - iOS [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 4 0 中退出应用程序 https stackoverflow com questions 3097244 exit application in ios 4 0 我有一个 AlertView
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 加速度计适用于 iphone/ipad 模拟器吗?

    据我所知 当我在 XCode 中使用 iPad 模拟器时 我的应用程序应该会触发加速计事件 但事实并非如此 我用谷歌搜索了一下 似乎加速度计没有在模拟器中实现 这是正确的吗 如果是这样 为什么他们会有 硬件 gt 摇动手势 菜单选项 我的代
  • 从字典创建 Swift 对象

    如何根据 Swift 字典中的查找值动态实例化类型 希望这对其他人有用 我们需要进行一些研究才能弄清楚这一点 目标是避免巨大的 if 或 switch 语句从值创建每个对象类型的反模式 class NamedItem CustomStrin
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • 如何在 iPhone 中使用 XMPPFramework 创建 MultiUserChatRoom

    我正在 iPhone 中使用 XMPPFramwwork 开发聊天应用程序 我成功完成了一对一聊天 现在我想在我的应用程序中开发多用户聊天 我尝试了以下代码 但未调用 XMPPRoomDelegate 的任何委托方法 我如何开始创建聊天室
  • 如何检测 UITableView 中某个单元格的双击?

    如何检测某个单元格上的双击UITableView i e 如果用户进行了一次触摸 我想执行一个操作 如果用户进行了两次触摸 我想执行另一个操作 我还需要知道进行触摸的索引路径 我怎样才能实现这个目标 Thanks 如果您不想创建子类UITa
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 获取所有ios应用程序的全局列表[重复]

    这个问题在这里已经有答案了 我想对苹果应用商店进行一些全球统计 一个瓶颈是至少获取所有当前活动应用程序的 ID 这 9 位数字 有谁知道如何获取 iOS 应用商店中当前活动应用程序的所有 id 的完整列表 更好的是特定类别的所有 ID 例如
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空
  • iOS 目标 c 中的 AES/CBC/PKCS5Padding 结果与 Android 不同

    我在 Android 应用程序中使用 AES CBC PKCS5Padding 代码就像 private static String TRANSFORMATION AES CBC PKCS5Padding private static St
  • 从应用程序内发送电子邮件中的图像和文本

    如何从我的应用程序内通过电子邮件发送图像和文本 表格数据形式 请大家帮忙并提出建议 谢谢 void sendMailWithImage UIImage image if MFMailComposeViewController canSend

随机推荐

  • 如何测试SSIS包?

    如何测试SSIS包 测试时应注意哪些事项 ssis 包 测试时应该编写哪些测试用例步骤 ssisUnit是一个用于对 SSIS 包进行单元测试的出色工具 我遇到的唯一警告是您需要在安装了 SSIS 服务器组件的计算机上运行单元测试 我在一家
  • 如何在 PHP 中删除十进制数的最后一位数字

    我想在 PHP 中删除十进制数的最后一位数字 假设我有 14 153 我希望它是 14 15 我将执行此步骤 直到我的数字不再是小数 我认为这应该有效
  • 如何对 QPlainTextEdit 进行分页?

    我一直在使用 QPlainTextEdit 在我们的应用程序中编辑文本 最近我们决定需要以分页格式显示文本 而不是一致的文本块 经过大量研究 我意识到虽然 QPlainTextEdit 没有任何页面或分页知识 但 QPlainTextDoc
  • 使用服务帐户的 YouTube 报告 API

    按照 Google 的文档 您应该能够使用 YouTube Reporting API 而无需使用服务帐户进行用户身份验证 目前我有一个非常简单的示例 它应该为我提供可用工作的列表 但也可能为空 但我的 403 权限被拒绝 Request
  • 如何以编程方式添加 UINavigationBar 及其上的后退按钮

    我是新手 尝试制作一个类似于 iPhone 的 Notes 应用程序UITextView 我正在得到textView和线路并且工作正常 我的问题是我想添加一个UINavigationBar和其上的后退按钮 我想添加一个UIToolBar底部
  • 如何比较 php/mysql 中的日期和时间

    我需要比较 php mysql 中的日期和时间基本上我有一个应用程序和一个服务器应用程序需要连接到服务器以检查数据库中的新条目 服务器从应用程序接收日期时间作为字符串 这是在此处完成的 SimpleDateFormat dateformat
  • C99 可变长度数组最大大小和 sizeof 函数

    我正在尝试在我的 C 代码中使用可变长度数组 VLA 并试图加深对它们应该做什么和不应该做什么的理解 我的函数中有以下片段 void get pdw frame usb pdws t pdw frame pdw io t pdw io un
  • powershell get-childitem 到 csv 并包含详细信息

    我正在尝试为具有深层文件夹结构的文件共享创建 CSV 文件 我希望 CSV 看起来像 filename filepath file type folderStructure 到目前为止我有以下内容 Get ChildItem Path D
  • 具有多重继承的消息映射 MFC:如何避免警告 C4407 和运行时崩溃

    我最近将一个项目从 VS2008 移植到 VS2013 并遇到了一些堆栈损坏问题 经过一番研究 我可以通过以下代码查明原因 class CInternalInterface afx msg void OnMouseMove UINT CPo
  • copy_from_user() 的任何示例吗?内核和用户空间

    我正在寻找将 PID 值从用户空间复制到内核空间 这是我的代码快照 内核模块 include
  • c# 使用高级 datagridview (ADGV) 过滤器而不使用 BindingSource

    我正在使用高级 DataGridView ADGV 发现here向我的应用程序添加过滤功能 过滤或排序的代码如下 private void advancedDataGridView1 SortStringChanged object sen
  • Twitter 表图像未附加 - iOS

    尽管我正在调整图像大小 但我仍然没有在 Twitter 表上看到我的图像 void twitterButtonPressed NSString post NSString alloc initWithFormat I ve burned s
  • SaltStack:条件包括:如果为空则出错

    我有一个条件包含 如下所示 include if CONDITION A foo bar endif if CONDITION B blu bla endif 这在大多数情况下都有效 但如果 CONDITION A 和 CONDITION
  • 使用 VC141 将 high_resolution_clock::time_point 转换为 time_t

    在 Visual Studio 2013 中我刚刚使用 include
  • 如何在 Ruby 中创建文件

    我正在尝试创建一个新文件 但事情似乎也没有按照我的预期进行 这是我尝试过的 File new out txt File open out txt File new out txt w File open out txt w 根据我在网上读到
  • 为什么 EcmaScript 5 严格模式要花这么大的功夫来限制标识符“eval”

    根据spec 附录 C 严格模式代码几乎无法执行任何可能使用名称分配任何标识符的操作eval 我可以理解有人可能想要限制use实际的eval函数 但我不明白限制名称的使用有什么目的 bobince基本上是正确的 我从事 Mozilla JS
  • 通过 PHP 获取 MIME 类型

    我可以本地访问文件 我需要获取它们的 MIME 类型 使用 WAMP LAMP CodeIgniter 和 Zend 库 获取 MIME 类型信息的最佳方式是什么 没有简单的方法 你可以尝试 http www php net manual
  • Facebook 发布 API 问题

    现在在我的网站上 我试图将其发布到用户墙上的媒体文件 我之前在旧的 api 上工作过 但现在我试图让它在新的 api 上工作 但遇到了问题 我正在运行这个 facebook gt api client gt stream publish m
  • R 将数据帧转换为 JSON

    我有一个数据框 我想将其转换为 json 格式 我的数据框名为 res1 library rjson structure list id c 1 2 3 4 5 value structure 1 5 Label c server1 ser
  • 如何从 UIWebView 获取整个图像,包括屏幕外内容

    我有一种方法可以从 iOS 应用程序中的各种视图获取图像 以便用户通过电子邮件发送屏幕 我绘制的大多数屏幕都工作正常 但是当我将这种技术与 UIWebView 一起使用时 我只能获得屏幕的可见部分 屏幕外的任何内容都不包含在渲染图像中 一直