Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么矢量化PDF图像具有分辨率属性_Ios_Swift_Xcode - Fatal编程技术网

Ios 为什么矢量化PDF图像具有分辨率属性

Ios 为什么矢量化PDF图像具有分辨率属性,ios,swift,xcode,Ios,Swift,Xcode,我有点困惑,为什么矢量化图像会有分辨率属性?它不应该被矢量化并提供任何大小吗 好的,我在Xcode上做了一个小测试,打印了pdf图像的宽度和高度。我注意到它的3乘以分辨率。(在3倍设备屏幕上测试) 您可能知道,在编译时,Xcode会从PDF图像生成1x、2x和3x图像。这些图像大小由Xcode决定,具体取决于PDF图像的分辨率。这与测试结果是一致的 我能否得出结论,pdf图像在1x设备模板上的分辨率必须与它的像素大小相同?生成的图像会被像素化吗 此外,PDF的分辨率不应该比所需的1x大小高很多,

我有点困惑,为什么矢量化图像会有分辨率属性?它不应该被矢量化并提供任何大小吗

好的,我在Xcode上做了一个小测试,打印了pdf图像的宽度和高度。我注意到它的3乘以分辨率。(在3倍设备屏幕上测试)

您可能知道,在编译时,Xcode会从PDF图像生成1x、2x和3x图像。这些图像大小由Xcode决定,具体取决于PDF图像的分辨率。这与测试结果是一致的

我能否得出结论,pdf图像在1x设备模板上的分辨率必须与它的像素大小相同?生成的图像会被像素化吗

此外,PDF的分辨率不应该比所需的1x大小高很多,否则可能会影响内存。对吗?

PDF是向量——有点像。您仍然可以在PDF中使用光栅元素(例如嵌入图像,有时还可以放置阴影),对于此类图像,您仍然应该使用PNG。否则,当apple首次向资产目录(iOS8)添加PDF支持时,PDF将在编译时被光栅化,这是正确的。事实证明,这并不总是可取的,因为有时你希望能够在同一个应用程序中以不同的点大小(不仅仅是像素大小)使用相同的矢量资源,因此他们添加了“保留矢量数据”选项(iOS 11)。如果选中此选项,则资源将保存为pdf格式,光栅化将推迟到您要求时进行

所以要回答你的两个问题:

  • 您的pdf应该是您想要的点大小(而不是像素大小)(即1x),系统将始终根据屏幕比例(即1x、2x、3x或将来可能的其他内容)对其进行缩放
  • 如果您使用“保留矢量数据”,并且pdf没有光栅元素,那么就内存而言,它的点大小应该无关紧要(矢量大小将与pdf中曲线的复杂度成比例,而不是其像素大小)。然而,一旦光栅化,它确实会占用与光栅化图像大小成比例的内存

  • 这只是一个资产目录需要提前做多少工作以及系统在运行时需要做多少工作的问题。如果PDF仅用于1x、2x和3x,则在构建应用程序时,资产目录可以对其进行预渲染,因此运行时根本不需要花费时间来绘制它。但是,如果要以其他大小显示此PDF,则运行时必须执行该渲染。因此,只能在后一种情况下保留矢量数据。

    与其他一些矢量格式(如SVG)不同,PDF确实具有尺寸,尽管它们是点而不是像素。您可以在预览中查看PDF的尺寸-打开文件,然后转到工具菜单->显示检查器。然后,单击裁剪标尺。

    我不确定您关于“保留矢量数据”的说法。我用不同的点大小做了上面的测试,并检查了“保留向量数据”和“不保留向量数据”。测试给出了相同的值。有什么想法吗?您的测试应该给出相同的值,因为您正在测试CGImage,这是图像的光栅化形式;他们俩都被光栅化成了同一件事。如果希望看到“保留向量数据”的差异,请将非常小的图像转换为非常大的图像视图,并将其缩放以填充。如果“保留向量数据”处于启用状态,则会以更高的分辨率对其进行正确光栅化,但如果“保留向量数据”处于禁用状态,则会对其进行插值并使其模糊。您提到的关于“保留向量数据”的内容是否适用于情节提要?如果不是wht方法,它是否适用?那么为什么我们有点大小(1x)的PDF。为什么不是0.5x或0.01x?因为它被缩放了?它应该是1x,因为当你在屏幕上设计它时,1x应该与你屏幕上的大小大致相同,它在iPhone上的大小(即每英寸72点)。由于光栅文件的大小是基于曲线的数量而不是曲线的大小,因此将其变小不会节省任何内存,因此您最好将其保存为实际显示的大小。
    let imageRef = (imageView.image?.cgImage)!
    let size = imageRef.bytesPerRow * imageRef.height
    print(imageRef.width)
    print(imageRef.height)