有没有办法在我的 ios 应用程序中创建高分辨率图像?
Posted
技术标签:
【中文标题】有没有办法在我的 ios 应用程序中创建高分辨率图像?【英文标题】:Is there a way to create high-resolution images within my ios apps? 【发布时间】:2015-10-22 17:58:32 【问题描述】:我有一个生成各种图像/绘图的 ios 应用程序,然后我使用 UIImage 类将其保存到设备中。图像最终分辨率相当低 - 有没有办法强制更高的分辨率,甚至生成要从 iOS 应用程序保存的矢量?
编辑:这里是代码运行方式的一些细节
为了创建图像,我使用 UIBezierPath() 创建了多个片段 - CAShapeLayer()。我将它们作为子层添加到其中创建了图像的 UIView 中,简写如下:
for i in 0...segmentCounter-1
let path = UIBezierPath() // this is generated in a function with some funky logic for points, colors, etc - UIBezierPath() is a placeholder
let shapeLayer = CAShapeLayer()
shapeLayer.opacity = 0.8;
shapeLayer.path = path.CGPath
self.layer.addSublayer(layer)
运行几次后,创建了一个包含多个图层的图像,我使用以下代码保存图像:
UIGraphicsBeginImageContextWithOptions(self.drawingView.layer.bounds.size, false, 0)
self.drawingView.drawViewHierarchyInRect(self.drawingView.layer.bounds, afterScreenUpdates: true)
let img:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIImageWriteToSavedPhotosAlbum(img, self, "image:didFinishSavingWithError:contextInfo:", nil)
【问题讨论】:
能否请您发布一些示例代码?如果您创建自己的 CGContext,您应该能够以点和比例指定尺寸。 我在上面的编辑部分发布了一些代码 - 我没有明确使用 CGContext (我不认为,我对此还是很陌生) - 从我上面的代码中,你会建议我改变? 【参考方案1】:如果要生成“矢量”文件,最简单的方法是生成 PDF。您可以使用UIGraphicsBeginPDFContextToFile
或UIGraphicsBeginPDFContextToData
代替UIGraphicsBeginImageContextWithOptions
。您可以找到有关使用此函数(以及您还需要调用的其他函数)here 的 Apple 文档。
如果您想生成具有更多像素的光栅图像,只需将更大的比例作为最后一个参数传递给UIGraphicsBeginImageContextWithOptions
。您当前使用的零表示“当前设备主屏幕的比例”,因此它可能是 2(对于普通 Retina 屏幕)或 3(对于 iPhone 6 Plus 屏幕)。你可以传递任何你想要的数字。它不必是整数。
【讨论】:
效果很好,谢谢。最后一个问题 - 是否有可以设置的最大值?我最初将它设置为 50,它抛出了一个致命错误异常 - 但是当我将它设置为 10 时它工作得很好。 如果您的绘图图层的边界大小为 100x100,并且您将比例设置为 50,则您要求系统创建 5000x5000 位图。位图中的每个像素需要四个字节,因此这是一个 100 MB 的位图。 (实际上更多,因为系统喜欢位图的每一行都是 64 字节的倍数。)你的绘图层有多大? 我明白了,这是有道理的。我的绘图层的大小根据创建它的系统而有所不同 - 所以在 ipad 上它是 728.0, y = 728.0 而在 iphone 上它是 374X374。以上是关于有没有办法在我的 ios 应用程序中创建高分辨率图像?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用android studio在我的flutter项目中创建一个Podfile?