Core Graphics は、素早い特殊効果を実現するデフォルトの画像フィルターを提供します。プレビューで画像ファイルを保存する方法は次のとおりです。macOSエフェクト付き。
アップルのコアグラフィックス(Quartz) 2D イメージング サブシステムは、グラフィックスの作成、保存、操作のための高性能で一貫した API を提供します。また、Apple プラットフォーム (Core Text) 上でほとんどのテキストを描画する役割も果たします。
特定のディスプレイが完全な計算解像度でテキストを表示できない場合でも、サブピクセル精度とアンチエイリアシング (平滑化) を使用して、Quartz によってテキストを描画できます。
Quartz は広大で、Apple オペレーティング システム上の 2D イメージングのほぼすべての側面をカバーしています。iOSそしてmacOS。 Quartz は Apple の最も古いフレームワークの 1 つで、Mac OS X 自体とともにデビューしました。
イメージング モデルは合成に基づいており、複数のグラフィックス レイヤーを透明度 (アルファ) と組み合わせて、操作、変換、保存、印刷、またはディスプレイにコピーできます。
Quartz Compositor は、画像のアセンブリと操作、画像の結合、回転、変換の適用、または画像の整形を担当します。最終的な画像が組み立てられると、表示エンジンは画像をディスプレイまたはプリンタに移動 (または「ブリット」) します。
macOS の場合、Window Server はさらに、画像のカリングと隠蔽を処理して、特定のウィンドウ向けの表示画像がそれらのウィンドウにのみ残るようにします。
macOS Window Server 自体は、ウィンドウのコンテンツを組み立てるときに Quartz Compositor を使用します。
パフォーマンス上の理由から、Window Server は、ウィンドウに表示される部分のみが描画されるようにイメージをクリップする方法を認識しています。これは、たとえば macOS でウィンドウ間をクリックすると、ウィンドウの一部が他のウィンドウの背後に隠れる仕組みです。
Window Server は、表示時にイメージをクリップすることで、ウィンドウの一部が隠れている場合でもウィンドウの内容全体を描画する必要がなくなるため、レンダリング パフォーマンスを大幅に向上させます。
Mac OS X が 2000 年に初めてリリースされたとき、グラフィックス エンジンとフレームワークはコンピュータ業界で最も先進的でした。
iOS デバイスは、macOS のように専用のウィンドウ サーバーを使用しないことを除いて、Mac とある程度同じように動作します。どちらも同じ Quartz フレームワークと API を使用します。
上のほぼすべてのものマックiOS デバイスは Quartz を使用して描画されます。これには、個々の画像と画像ファイルだけでなく、macOS 自体とそのウィンドウの内容のほとんどが含まれます。
Mac OS X Tiger 10.4 では、Apple は Quartz 2D Extreme を導入し、Quartz グラフィックスを専用 GPU にオフロードできるようにしました。 10.5 で Apple は Quartz Extreme という名前を QuartzGL に変更しました。
また、専用の GPU が利用可能な場合、Quartz Compositor は QuartzGL を使用してレンダリングを高速化します。
Apple は以前、Quartz Composer というアプリを出荷していましたが、現在は廃止されています。
Apple の Quartz Composer アプリ。
ジオメトリに基づく
画面上に描画または印刷されたものは、Quartz が実際に計算したグラフィックスの近似にすぎません。 Quartz は、グラフィックスが事前にレンダリングされたピクセルのページとして存在するビットマップ画像である場合を除き、舞台裏で数学的モデルを使用して、描画するグラフィックスを実際に計算します。
このようなグラフィックスの数学的モデルは、表示方法や印刷方法に関係なく、最初にジオメトリを使用して計算されるため、ベクトル グラフィックスと呼ばれることもあります。
ベクター グラフィックスには、任意のサイズに拡張できるという大きな利点があります。画像を拡大または縮小するには、単に異なるスケールで画像を再計算するか、グラフィックスが描画される前にスケーリング変換を適用します。
変換は、サイズや形状を変更するために画像に適用される数学的調整です。画像編集プログラムで画像を回転またはワープするとき、または空間内の 3D オブジェクトを操作するときは、モデルに変換を適用し、それが再描画されることになります。
変換はビットマップ イメージにも適用できますが、通常、元のイメージにある程度の歪みが生じます。
ベジェ曲線は、通常、開始点、制御点、1 つ以上の曲率、および曲線の形状を変更するために使用できる成形点または「ハンドル」を備えた曲線ベクトル グラフィックスを記述します。 Adobe Illustrator などのベクター描画アプリを使用したことがある場合は、オブジェクトの形状を変更するためにベジェ曲線を使用したことがあるでしょう。
たとえば、フォントはベジェ曲線ジオメトリとベクトル描画を使用して、各文字を個別に描画するアウトライン (ストローク) を記述します。 macOS でドキュメント内のテキストのフォントまたはフォント サイズを変更すると、描画された文字ごとに新しい計算が再適用されます。
macOS の各フォント ファイルには、特定の書体で各テキスト文字を描画する方法に関する指示が含まれています。
クォーツディスプレイサービス
Quartz には、さらに次のサブシステムが含まれています。クォーツディスプレイサービス(QDS) は主にハードウェア ディスプレイ自体に関係します。元々は非常に小さな API でしたが、現在では QDS は数十の API を処理するように拡張されました。
- ディスプレイの位置特定と識別
- 表示プロパティの変更
- すべてのディスプレイ構成を一度に設定する
- ディスプレイのキャプチャ
- ディスプレイのコンテンツのストリーミング
- フェード効果の使用
- ディスプレイミラーリングの切り替え
- ガンマと色の補正を適用する
- 表示変更の更新を受信する
システム設定アプリでディスプレイの解像度を変更したり、メイン メニュー バーを別のディスプレイに移動したことがある場合は、QDS を使用したことがあるはずです。
macOS アプリには、新しい表示プロパティに合わせてウィンドウとウィンドウの内容を再構成できるように、表示変更の通知を受信するコードを含める必要があります。
macOS メニュー バーを含む接続されたディスプレイはメイン ディスプレイと呼ばれます。各ディスプレイには DisplayID (32 ビット) が割り当てられます。CGDirectDisplayID
) 起動時に macOS によって実行されます。
データ型
Quartz は、グラフィックス計算で使用する独自の描画プリミティブのセットを定義します (これについては、Core Graphics ドキュメントで説明されています)。これらのプリミティブには、単一の整数や浮動小数点数、点、サイズ、四角形などの幾何学的形状から、パス、ベクトル、変換まで、あらゆるものが含まれます。
表示コンテキスト、画像 (ビットマップ用)、レイヤー、色、フォントもあります。表示コンテキストは、描画できるグラフィックス環境として定義されます。
通常、各ディスプレイには描画コンテキストがありますが、追加のオフスクリーン コンテキストや複合コンテキストも存在する可能性があります。
描画コンテキストのプロパティを変更して、コンテキストが再描画されたときの内容の外観を変更することもできます。
これらのデータ型のほとんどは、単純な個別の型で構成されています。たとえば、CGPoint
Quartz では、X 座標と Y 座標という 2 つの倍精度浮動小数点数を含む構造体として定義されます。あCGPoint
ディスプレイまたはコンテキスト上の任意の 1 つの点を説明します。
あCGRect
は他の 2 つの Quartz タイプで構成されます。CGPoint
(出発点)とCGSize
(寸法)。ほとんどの 2D コンピュータ グラフィックス システムにおける描画開始点は、起源。
2D システムによっては、左上隅から右下までの距離を測定するものや、左下隅から右上上までの距離を測定するものもあります。
クォーツも定義しますレイヤー(CGLayer
) それぞれを個別に描画したり、組み合わせたり、アニメーション化したりできます。
CoreAnimation と呼ばれる別の Apple フレームワークでは、レイヤーを使用できます (CALayer
) 複数のグラフィックス レイヤーを同時にスムーズにアニメーション化します。
Adobe PDF のポータブル ドキュメント ファイル。
PDF ファイルは、表示または印刷するための最終的なレンダリングを除き、Apple プラットフォーム上の Quartz とは別に処理されます。これは、PDF がもともとレンダリングに PostScript を使用する Adobe 標準であったためです。
NeXT コンピュータには、PostScript に基づく同様のシステムがあり、表示追記これは、表示および印刷レンダリングに Adobe テクノロジーを使用しました。 PostScript では、グラフィックス計算にベクトル グラフィックスも使用して、あらゆるスケールでスムーズな描画を実現しました。
PDF は Apple のテクノロジーではありませんが、Quartz は PDF に次のデータ型を提供します。CGPDFDocument
。このデータ型は、という別の Quartz 型から内容を取得します。CGDataProvider
。
これら 2 つのデータ タイプを使用すると、表示または印刷用の PDF ドキュメントの表現を作成できます。初期化することもできますCGPDFDocument
ファイルまたは URL から直接。
CGPSConverter
は、PDF と従来の PostScript コードとの間の直接変換に使用できる Quartz タイプです。古いプリンタの ROM には PostScript が埋め込まれているため、PostScript および PDF ファイルを受信して印刷できます。
Apple には、ImageKit、PDFKit、Quartz Composer (現在はほとんど非推奨)、Quick Look など、画像とファイルを操作するためのフレームワークが他にもいくつかあります。
クォーツとプレビュー
macOS のプレビュー アプリは本質的には Quartz および PDF レンダリング アプリであり、ビットマップ画像を表示する方法も認識しています。
プレビューでは、Quartz を使用して、macOS と同じ方法でファイルと画像を合成して表示します。すべての描画コマンドを実行し、他の Quartz アプリが実行できる変換を実行できます。
また、PDF や PostScript ファイルを Windows に直接レンダリングする方法や、それらをレーザー プリンタやインクジェット プリンタに送信する方法も認識しています。 PDF ファイルをプレビューで開くと、Quartz API を使用して PDF 描画コマンドがレンダリングされ、Apple のネイティブ システムで画面上に描画されます。
クォーツとフィルター
すべてを表示する準備ができたら、Quartz Filters (CIFilter
) を適用すると、グラフィックスや画像ファイルの表示、保存、印刷時に特殊効果を使用できます。 PDF には、Apple の ColorSync テクノロジーを使用して画像フィルターを適用することもできます。
Quartz は、基本的によく知られた写真タイプの効果を画像に適用する、定義済みの標準フィルター セットを提供しますが、カスタム フィルターを定義して適用することもできます。 macOS には、画像フィルターの追加、削除、管理に使用されるフィルター マネージャーも含まれています。
CIFilter は複雑になる場合がありますが、依存するのは 2 つの Quartz データ型のみです。CIImage
そしてCIContext
。 CIImage は本質的に、既存の画像を入力として受け取るか、それを CIContext に描画して新しい画像を生成する画像ジェネレータです。
CIFilter を使用して画像がどのように変更されるかを心配する必要はありません。Apple にはコードがすべて組み込まれています。使用するフィルタを選択し、変更する既存の画像または描画コンテキストを指定するだけで、Quartz がその処理を実行します。もの。
これによりフィルター効果も標準化されるため、Quartz API が使用されている限り、Mac プラットフォームのソフトウェア全体で一貫性が保たれます。
選択したフィルタが適用されると、新しいフィルタが適用されます。CIImage
出力は使用可能な状態になります。を適用することもできますCIColor
画像に追加して、全体的な色かぶりを変更します。
Apple は、ジオメトリの変更、合成、グラデーション、レンズ効果などのための組み込みフィルターも提供しています。すべての組み込みフィルターは、「CI」で始まる定数を使用してカテゴリ別にグループ化されます。あるグループがそう呼んだCICategoryStylize
には、画像を写真、新聞紙、漫画、ステンドグラスのように見せるための数十の方法が用意されています。
おそらく、Adobe Photoshop などのアプリでこの種の効果を見たことがあるでしょう。
現在、数百の Apple 定義の Quartz フィルタがあり、Apple SDK ヘッダー ファイルに詳細が記載されています。CIFilterBuiltins.h
。ただし、すべてのフィルター タイプを表示するより良い方法は、サードパーティの Web サイトにアクセスすることです。コアイメージフィルターリファレンスノア・ギルモアによるドキュメントプロジェクト。
ギルモアは、5 つ星の Core Image リファレンス アプリも提供しています。iPadでアプリストア呼ばれたCIFilter.io($5) には、Apple の組み込みフィルターの詳細が記載されています。サイトとアプリの両方に、各フィルターが利用できる iOS と macOS のバージョンが表示されます。
Noah Gilmore による CIFilter.io アプリ内の Apple の CIThermal フィルター。
プレビューでのフィルターの適用
残念ながら、macOS のプレビュー アプリはまだフル機能の画像エディターではありません。サイズ変更や回転などの基本的な操作は実行できますが、現時点では一般的なフィルター効果はサポートされていません。
Apple はすでに OS 内のすべてのフィルターを提供しているため、これはあまりにも残念です。現在、プレビューでできることは、基本的な線と図形を描画し、色を調整し、テキストを追加することだけです。
ただし、プレビューで実行できることは、ファイルを保存するときにフィルターを適用することです。ただし、事前定義されたフィルターの少数の選択セットにのみ適用されます。実際、このセットは、/Library/ColorSync/Profiles に存在し、macOS に同梱されている ColorSync Core Image フィルターの定義済みセットです。
そのためには、次のことを実行しますファイル -> 保存または名前を付けて保存、そして、から石英フィルターメニューで、使用可能なフィルターの 1 つを選択します (ファイル形式がサポートしている場合)。
ファイル名、場所、形式、および形式がサポートしている場合は Quartz フィルターを選択します。
をクリックします。保存ボタンを押してファイルを保存します。
プレビューは、.PNG ファイルを含む、保存時のすべてのファイル タイプへのフィルターの適用をまだサポートしていません。プレビューで提供されているフィルターのほとんど保存シートは白黒、グレースケール、セピアへの変換、明度の変更、ファイルサイズの最適化を行うためのものです。
PDF の場合、ファイルを PDFX-3 ドキュメントとして保存するためのカスタム フィルターもあります。これは主にプロフェッショナルな印刷に使用されます。
このセットには制限がありますが、保存時に画像ファイルをすばやく簡単に変更する方法です。うまくいけば、Apple はこのセットを拡張して、より多くの事前定義フィルターとより多くのファイル タイプを含めるようにしてくれるでしょう。
Core Image は魅力的なテーマであり、信じられないほど簡単で便利です。 Apple が将来 macOS と iOS でのサポートを拡張することを選択した場合、その傾向はさらに高まるでしょう。
Apple プラットフォームでの Quartz プログラミングに興味がある場合は、レガシー ドキュメントを参照してください。Quartz 2D プログラミング ガイド。というタイトルの素晴らしいサードパーティの本もあります。Quartz によるプログラミング: Mac OS X の 2D および PDF グラフィックス。