0

CGPDFContext を作成する必要があります。この PDF には画像が 1 つだけ含まれています。

画像は 2100 x 3000 ピクセルです。

この画像を Photoshop で開き、300 dpi で印刷するとします。Photoshop は 300 ピクセルを使用して印刷物を 1 インチごとに作成するため、この画像は 7 x 10 インチになります。

そのため、この画像はこのサイズになっています。

ここで、CGPDFContext を作成する必要があります。このコンテキストはポイントで作成する必要があることをどこかで読みました。CGPDFContext では 1 ポイント = 1/72 インチであるという記述があります。これは、コンテキストが 72 dpi (?) になることを意味します。

では、300 dpi で最高の品質を得るには、このコンテキストをどのサイズで作成すればよいでしょうか。

もう 1 つの質問は次のとおりです。このコンテキストが 1/72 のものに基づいて作成されたと仮定すると、7 x 10 インチは 504 x 720 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 に縮小したくない

4

3 に答える 3

1

他の両方の答えは技術的には正しいですが、両方の質問に明示的に答えてみましょう。

ここで、CGPDFContext を作成する必要があります。このコンテキストはポイントで作成する必要があることをどこかで読みました。CGPDFContext では 1 ポイント = 1/72 インチであるという記述があります。これは、コンテキストが 72 dpi (?) になることを意味します。

渡す必要があるパラメーターは、作成する PDF のメディアボックスの場所とサイズです。メディアボックスは、自由に配置できるキャンバスです。

PDF は 1 ポイントが 1/72 インチに等しいスペースを使用しますが、これを従来の「画像」の方法で dpi と考えるべきではありません。これは単純な慣例であるため、サイズが 72 x 72 ポイントのメディアボックスを指定すると、実際には高さと幅が 1 インチの PDF ファイルが生成されることがわかります。

では、300 dpi で最高の品質を得るには、このコンテキストをどのサイズで作成すればよいでしょうか。

あなたのコードは正しいです:-)

このコンテキストに配置した画像は、常にフル サイズで挿入されます (つまり、Apple は背後のピクセルを破棄しません)。つまり、画像の最終的な解像度は、画像のピクセル数と、ページ上で画像を配置するために選択した四角形のサイズ (ポイント単位) によって決まります。

したがって、この単純な例では問題ありません。ただし (頭を痛めるリスクがありますが)、PDF コンテキストは他のコンテキストと同様に変換できることに注意してください。PDF コンテキストの現在の変換マトリックスを回転またはせん断することができます。その場合、画像にはまだすべてのピクセルがありますが、有効な解像度は、変換マトリックスに対して行った悪事に依存します。

于 2015-01-25T23:49:49.673 に答える
0

解像度は、PDF のメディア サイズに依存しません。メディア サイズは 1/72 インチで指定されるため、2100x3000 'ユニット' (別名ポイント) は 29.166x41.666 インチのメディア サイズです。PDF ファイルには解像度がありません。

一般に、PDF のコンテンツはベクトル情報であるため、解像度に依存しません。ビットマップは PDF に描画される場合があり、それらには解像度がありますが、72 dpi ではありません。画像の解像度は、各次元の画像サンプルの数と、メディアに配置するために適用される倍率によって異なります。

300x300 の画像サンプルである画像を考えてみましょう。これを 72x72 (つまり 1 インチ四方) の PDF に配置し、正確に収まるようにスケーリングすると、画像は事実上、内部で 300 dpi になります。

PDF の用語では、同じ画像を使用して 144x144 (2x2 インチ) の PDF ページを作成し、それに合わせて画像を拡大縮小できます。現在、画像は 150 dpi です。画像は変更されていませんが、倍率は変更されています。

PDF ファイル内の画像のレンダリング時の最終的な「解像度」は、サンプル数と倍率 (上記のとおり)、および PDF ファイルをレンダリングする解像度によって異なります。上記の 2 つのケースでは、300 dpi でレンダリングすると画像はまったく変化しませんが、最初のケースでは元の画像サンプルを最終的な出力ピクセルに 1:1 でマッピングします。ただし、2 番目のイメージは、出力で各イメージ サンプルを 4 ピクセルにマップします (各方向に 2 ずつスケーリングされているため)。

Photoshop @300 dpi で PDF ファイル (2100x3100 ポイント) をレンダリングすると、Photoshop は 8750x12500 ピクセルのビットマップを作成します。29.16x41.66 インチ、300 ドット/インチのままです。600 dpi でレンダリングすると、17500x25000 ピクセルになります。

コンテキストは 1/72 インチのデフォルトの PDF スペースで作成されるように聞こえるので、PDF ファイルのメディア サイズ、つまり 2100x3100 を使用するだけで済みます。

于 2015-01-25T11:50:26.250 に答える