我得写一个CGPDFContext。此PDF只包含一张图片。
图像有2100x3000像素。
假设我在Photoshop上打开这个图像,并以300 dpi打印它。Photoshop将使用300个像素来构建每一英寸的印刷材料,因此这张图像将有7×10英寸。
正因为如此,这个图像才有这样的大小。
现在我必须创建一个CGPDFContext。我在某个地方读到,这个上下文必须以点来创建,其中提到在一个CGPDFContext上,点= 1/72英寸,这意味着上下文将有72 dpi (?)。
那么,我应该创建什么样的上下文才能达到300 dpi的最大质量。
另一个问题是:假设这个上下文是基于1/72的内容创建的,那么7x10英寸将代表504x720 pt。如果这是我必须创建上下文的大小,那么当我使用它将图像写入上下文时会发生什么呢?
CGImageRef imageRef = image.CGImage; // this image is 2100x3000 pixels
// mediaBox = 0,0,504,720
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, auxillaryInformation);
CGContextDrawImage(pdfContext, CGRectMake(0.0f, 0.0f, 504, 720), imageRef);2100x3000像素图像会嵌入到上下文中而不会丢失像素吗?我不想把图像缩小到504x720
发布于 2015-01-25 20:43:56
如果你的图像是2100*3000像素,你在PDF页面上画它,即7*10英寸(504*720点),那么你的图像将嵌入300 dpi。
图像大小将保持在2100*3000像素,并且不会缩小到504*720像素。
发布于 2015-01-25 23:49:49
其他两种答案在技术上都是正确的,但让我试着明确地回答你的两个问题:
现在我必须创建一个CGPDFContext。我在某个地方读到,这个上下文必须以点来创建,其中提到在一个CGPDFContext上,点= 1/72英寸,这意味着上下文将有72 dpi (?)。
必须传递的参数是要创建的PDF的mediabox的位置和大小。mediabox是你可以随意使用的画布。
PDF使用1点等于1/72英寸的空间,但你不应该用传统的“图像”方式把它看作是dpi。这是一个简单的约定,这样您就知道指定一个大小为72x72点的mediabox将为您提供一个PDF文件,该文件在现实世界中是1英寸高和宽的。
那么,我应该创建什么样的上下文才能达到300 dpi的最大质量。
您的代码是正确的:
您放置在此上下文中的图像将始终作为完整大小插入(这意味着Apple不会在背后丢弃像素)。这意味着图像的最终分辨率取决于图像的像素数和选择将其放在页面上的矩形的大小(同样以点为单位)。
所以,在这个简单的例子中,你很好。然而(冒着伤害大脑的风险),请记住PDF上下文--就像任何其他上下文一样--允许您转换它们。您可以旋转或剪切PDF上下文的当前转换矩阵。在这种情况下,你的图像仍然有所有像素,但是它的有效分辨率将取决于你对转换矩阵做了什么坏事。
发布于 2015-01-25 11:50:26
决议是独立于媒体的大小,PDF格式。媒体尺寸以1/72英寸为单位,因此2100x3000‘单位(又名点数)是一个媒体大小为29.166x41.666英寸。PDF文件做,而不是有一个解决方案。
一般来说,PDF的内容是矢量信息,分辨率也是独立的。位图可以用PDF格式绘制,并且有分辨率,但不是72 dpi。图像的分辨率取决于每个维中的图像样本数,以及应用于介质上的尺度因子。
考虑一个图像,它是300x300图像样本。如果我们把它放到一个PDF上,它是72x72 (即1英寸正方形),并缩放它来精确地适应,那么图像实际上是300 dpi内部。
在PDF术语中,我可以使用相同的图像,创建一个PDF页面,为144x144 (2x2英寸),并缩放图像以适应这一情况。现在图像是150 dpi。图像没有改变,但是比例因素改变了。
现在,PDF文件中任何图像的最终“分辨率”,当呈现时,将取决于样本的数量和缩放因子(如上)以及您呈现PDF文件的分辨率。以上述2种情况为例,如果我渲染为300 dpi,图像将完全不改变,但是在第一种情况下,原始图像样本将映射到最终的输出像素上。然而,第二幅图像将把每个图像样本映射到输出中的4个像素(因为它在每个方向上被缩放了2)。
如果您在Photoshop @300 dpi中呈现PDF文件(2100x3100点),则Photoshop将创建一个8750x12500像素的位图。它仍然是29.16x41.66英寸,300点每英寸。如果渲染到600 dpi,那么您将得到17500x25000像素,依此类推。
听起来上下文是在1/72英寸的默认PDF空间中创建的,所以您只需要使用PDF文件中的媒体大小,即2100x3100。
https://stackoverflow.com/questions/28135328
复制相似问题