JP2023076287A - 情報処理装置とその制御方法、及びプログラム - Google Patents
情報処理装置とその制御方法、及びプログラム Download PDFInfo
- Publication number
- JP2023076287A JP2023076287A JP2021189621A JP2021189621A JP2023076287A JP 2023076287 A JP2023076287 A JP 2023076287A JP 2021189621 A JP2021189621 A JP 2021189621A JP 2021189621 A JP2021189621 A JP 2021189621A JP 2023076287 A JP2023076287 A JP 2023076287A
- Authority
- JP
- Japan
- Prior art keywords
- information processing
- printer
- processing apparatus
- data
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1237—Print job management
- G06F3/1253—Configuration of print job parameters, e.g. using UI at the client
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/1203—Improving or facilitating administration, e.g. print management
- G06F3/1205—Improving or facilitating administration, e.g. print management resulting in increased flexibility in print job configuration, e.g. job settings, print requirements, job tickets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1224—Client or server resources management
- G06F3/1225—Software update, e.g. print driver, modules, plug-ins, fonts
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1237—Print job management
- G06F3/1244—Job translation or job parsing, e.g. page banding
- G06F3/1247—Job translation or job parsing, e.g. page banding by conversion to printer ready format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1278—Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
- G06F3/1285—Remote printer device, e.g. being remote from client or server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Accessory Devices And Overall Control Thereof (AREA)
- Record Information Processing For Printing (AREA)
- Stored Programmes (AREA)
Abstract
【課題】ホストデバイス上で動的に印刷データの生成処理を変更する構成を有する情報処理装置、その制御方法及びプログラムを提供する。
【解決手段】情報処理装置で動作するときに解釈され実行される第一プログラムと、第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置であって、印刷を実行するプリンタに紐づいた印刷データを生成する、変更可能な第一生成ロジックを取得し、第一生成ロジックの少なくとも一部を変更した第二生成ロジックを生成する。そして、入力された画像データと、第二生成ロジックとを用いてプリンタで印刷するための印刷データを生成し、生成した印刷データをプリンタへ送信する。第一生成ロジックは、第二プログラムを利用して実行される。
【選択図】図3
【解決手段】情報処理装置で動作するときに解釈され実行される第一プログラムと、第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置であって、印刷を実行するプリンタに紐づいた印刷データを生成する、変更可能な第一生成ロジックを取得し、第一生成ロジックの少なくとも一部を変更した第二生成ロジックを生成する。そして、入力された画像データと、第二生成ロジックとを用いてプリンタで印刷するための印刷データを生成し、生成した印刷データをプリンタへ送信する。第一生成ロジックは、第二プログラムを利用して実行される。
【選択図】図3
Description
本発明は、情報処理装置とその制御方法、及びプログラムに関するものである。
近年、スマートフォンの個人所有率は高く、各プリンタベンダーも、スマートフォンの印刷アプリをユーザへ提供することが当然となっている。このような印刷アプリを使用することにより、ユーザはスマートフォンからプリンタにJPEGなどの画像データを送信し、プリンタは、その受信した画像データから印刷データを生成して印刷できる。
このようなプリンタにおける印刷データの生成処理には、画像データのデコード、色空間変換、インク色分解、量子化等の多くの処理が存在し、プリンタのインク数やインクの特性、内部の演算精度など、プリンタ毎に違いがある個所は個々に最適化されている。これらの制御は、プリンタのFW(ファームウェア)が行い、印刷データの生成処理ではASIC(特定用途向け集積回路)を併用して実行する。このようにASICを用いることで高速な処理を低コストで実施可能となる。
また上記ASIC処理の他に、ホスト側の印刷ドライバで印刷データを生成する方法もある。印刷ドライバは主にPCで利用され、スプール機能や細かい印刷設定を指定できるなど、印刷アプリにはないメリットが多く存在する。
上述した印刷アプリや印刷ドライバによる印刷データの生成処理は、従来から、各プリンタベンダーによって提供されてきたが、印刷データの生成処理を個別にカスタマイズしたいという要望は多く存在する。印刷データの生成処理をカスタマイズできれば、ユーザは自身の好みの印刷物が作成可能となり、印刷物を商用的に扱う印刷ベンダーであれば、カスタマイズが商品の独自性、ひいては競争力につながると期待されている。
上述の印刷データの生成処理のカスタマイズには、印刷アプリの変更やFW(firmware)/ASICの変更、もしくは印刷ドライバの変更が必要となる。印刷アプリや印刷ドライバは、ビルド済みのプログラムを使う構成であり、ユーザが変更できる類のものではない。また、FWやASICもユーザが書き換えるようには作られておらず、こちらもユーザが手元で変更するのは困難である。そのため印刷データの生成処理のカスタマイズは、プリンタベンダーが行う必要があるが、ユーザ毎にプリンタベンダーがカスタマイズ対応をするのは負荷が大きく現実的でない。
これを解消する手段の一つとして、ホストデバイス上で動的に印刷データの生成処理を変更する構成が考えられる。
上述のような動的な印刷データの生成処理の変更には、JavaScript(登録商標)などのスクリプト言語が好適である。しかしながらスクリプト言語は、予めコンパイルされたプログラムに比べロジックが解析されやすい状況であり、スクリプト言語でのロジックの提供は、技術保護やセキュリティなどの観点から好ましくない。またスクリプト言語は、実行時にインタプリタによる解釈処理が実行されるため、予めコンパイルされたプログラムに比べ処理速度が遅い。この理由より、Webアプリにおいて、ホストデバイスでの処理とサーバでの処理を併用する手法が良く用いられる。
本発明の目的は、上記従来技術の課題の少なくとも一つを解決することにある。
本発明の目的は、プリンタで印刷される印刷データの生成を情報処理装置側で動的に変更でき、かつ、本来の印刷データの生成処理も併用できる状態で印刷データを生成できるようにする技術を提供することにある。
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
情報処理装置で動作するときに解釈され実行される第一プログラムと、前記第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置であって、
印刷データを生成する変更可能な第一生成ロジックであって、印刷を実行するプリンタに紐づいた前記第一生成ロジックを取得する取得手段と、
前記第一生成ロジックの少なくとも一部が変更された第二生成ロジックを生成する変更手段と、
入力された画像データと、前記第二生成ロジックとを用いて前記プリンタで印刷するための印刷データを生成する生成手段と、
前記生成手段で生成された前記印刷データを前記プリンタへ送信する送信手段とを有し、前記第一生成ロジックは、前記第二プログラムを利用して実行されることを特徴とする。
情報処理装置で動作するときに解釈され実行される第一プログラムと、前記第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置であって、
印刷データを生成する変更可能な第一生成ロジックであって、印刷を実行するプリンタに紐づいた前記第一生成ロジックを取得する取得手段と、
前記第一生成ロジックの少なくとも一部が変更された第二生成ロジックを生成する変更手段と、
入力された画像データと、前記第二生成ロジックとを用いて前記プリンタで印刷するための印刷データを生成する生成手段と、
前記生成手段で生成された前記印刷データを前記プリンタへ送信する送信手段とを有し、前記第一生成ロジックは、前記第二プログラムを利用して実行されることを特徴とする。
本発明によれば、スクリプト言語での懸念事項を抑えつつ、プリンタで印刷される印刷データの生成を情報処理装置側で動的に変更でき、かつ、本来の印刷データの生成処理も併用できる状態で印刷データを生成できるという効果がある。
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
本発明の実施形態に係る情報処理装置のハードウェア構成と外部装置との接続例を示すブロック図。
実施形態に係るプリンタの機能構成を説明するブロック図。
実施形態に係る情報処理装置が印刷データを生成してプリンタへ送信する処理を説明するフローチャート。
実施形態に係る情報処理装置がプリンタ或いはサーバからデータを取得する例を説明する図。
S302のUI表示で表示されるメインフロー画面の一例を示す図(A)と、図5(A)の前処理ブロックがクリックされることにより表示される前処理編集画面の一例を示す図(B)。
実施形態に係る情報処理装置において印刷データを生成して送信するまでの処理の流れを説明する図。
実施形態における画像データと扱うビット数を説明する図。
ビットシフトによるシアン(C)データのデータ圧縮を説明する図。
実施形態に係る情報処理装置からプリンタに送信する印刷データのデータフォーマットを説明する図。
実施形態に係る情報処理装置からプリンタに送信する印刷データの他のデータフォーマットを説明する図。
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これら複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一もしくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
図1は、本発明の実施形態に係る情報処理装置100のハードウェア構成と外部装置との接続例を示すブロック図である。
情報処理装置100は、CPU(中央演算装置/プロセッサ)101、GPU(Graphics Proccesing Unit)102、RAM104、ROM104、2次記憶装置105、外部I/F106~108を有する。情報処理装置100は、外部I/F106を介してインターネット110に接続され、また外部I/F108を介してプリンタ114に接続されている。またインターネット110にはサーバ111~113が接続されている。
CPU101は、以下で説明する各種処理をプログラムに従って実行する。尚、図1では、CPU101の数は1つであるが、複数のCPU或いはCPUコアによって構成されていても良い。GPU102は、大量の演算を並列処理できる演算装置である。GPU102は、一般的に3Dグラフィックや画像描画に必要な計算を得意とするが、近年では機械学習にも応用されている。RAM103は、CPU100によるプログラムの実行時に、ROM104或いは2次記憶装置105に記憶されているプログラムの展開領域を有し、また各種情報を一時的に記憶するワークメモリとしても機能している。ROM104は、CPU101がRAM103に展開して実行するプログラムを記憶している。2次記憶装置105は、例えばハードディスクやフラッシュメモリ等を有する記憶装置で、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラム等を記憶している。外部I/F(インターフェース)106~108は、有線通信と無線通信の内、少なくともいずれかの通信形態を有するインタフェースであり、利用する通信形態に応じて外部デバイス(プリンタ114或いはサーバ111~113)と通信を行う。有線通信には、例えば、USB、イーサネット(登録商標)等があり、無線通信には、無線LAN、NFC、Bluetooth(登録商標)、赤外線通信等がある。また無線通信として、無線LANを利用する場合には、装置同士が直接接続する形態もあれば、無線LANルータ等の中継装置を介して接続する形態もある。情報処理装置100が、例えばデスクトップPCなどの表示機能や入力機構を持たない装置の場合は、外部I/F107へ、キーボード、ディスプレイ、ポインティングデバイスなどを接続して、それらを利用する。情報処理装置100内の各種構成要素間の相互通信は、制御バス/データバス109を介して行われる。
プリンタ114は印刷装置であり、情報処理装置100の外部I/F108を介して情報処理装置100とデータの送受信を行う。また情報処理装置100は、外部I/F106を介してインターネット110と接続されている。
図2は、実施形態に係るプリンタ114の機能構成を説明するブロック図である。
実施形態におけるプリンタ114は、大別した機能として記録装置201と画像処理装置202とを有している。情報処理装置100より供給された画像データは、画像処理装置202で所定の画像処理が施された後、記録装置201に送られて記録(印刷)される。
記録装置201において、記録装置の主制御部203は、記録装置201全体を制御しており、CPU、ROM、RAM等を有している。記録バッファ204は、記録ヘッド205に転送する前の画像データをラスタデータとして格納する。記録ヘッド205は、インクを滴として吐出可能な複数の記録素子を有するインクジェット方式の記録ヘッドであり、記録バッファ204に格納された画像データに従って、各記録素子からインクを吐出する。シアン(C)、マゼンタ(M)、イエロー(Y)及びブラック(K)の4色分の記録素子列が、記録ヘッド205上に配列しているが、色数はその限りではない。例えば、上記4色以外に、ライトシアン、ライトマゼンタ、グレー等の記録素子を搭載することがある。また特色系インクとして、レッド、グリーン、ブルーインク、蛍光色系インクの記録素子を搭載することがある。また色以外の機能を有した銀インク、エンボスインク、クリアインク等の記録素子を搭載することもある。更に、ブラック1色の記録素子で構成されることもある。
記録バッファ204に蓄積されるデータ量が、記録ヘッド205の処理するデータ量に対して不足する場合に、記録ヘッドの動作が停止することでムラが発生する。これを防止するために、記録バッファ204にラスタデータを記憶する速度を、記録ヘッド205がデータに基づいて記録する速度より速くする必要がある。もう一つの対策としては、記録が終了するまでに記録バッファ204からデータが枯渇しない状態までラスタデータを蓄積してから記録を開始することが挙げられる。
給排紙モータ制御部206は、シートや用紙等の記録媒体の搬送や給排紙の制御を行い、記録ヘッド205から吐出されるインクを紙面の正確な位置に着弾させるよう紙位置を制御する。記録ヘッド205がマルチパス構成である場合も考慮して、搬送用モータのスタート・ストップ動作を実施する。
記録装置I/F207は、画像処理装置202との間でデータ信号の授受を行う。I/F信号線217は、両者を接続する。I/F信号線217の種類としては、例えばセントロニクス社の仕様のものを適用することができる。データバッファ208は、画像処理装置202から受信した画像データを一時的に格納する。操作部209は、開発者によるコマンド操作を行うための機構を持つ。システムバス210は、記録装置201の各機能部を接続する。
次に画像処理装置202を説明する。
画像処理装置の主制御部211は、外部I/F216から供給された画像データに基づいて、記録装置201が記録可能な印刷データを生成するためのもので、CPU、ROM、RAM等を備えている。主制御部211は、他に外部I/Fからの要求に対して対応するデータの返却も行う。画像処理装置202で使用する画像データの生成に必要な、例えばルックアップテーブルやマトリクスは、画像処理装置の主制御部211のROMに予め記録されている。画像処理装置I/F212は、記録装置201との間でデータ信号の授受を行う。外部I/F216は、例えばホストデバイスなどの情報処理装置から、画像データなどの授受を行う。表示部213は、ユーザに対し様々な情報を表示し、例えば液晶表示部などを適用することができる。操作部214は、ユーザがコマンド操作を行うための機構であり、例えばキーボードやポインティングデバイス等を有している。システムバス215は、主制御部211と各機能部とを結ぶ。
画像処理部219は画像処理を行う。外部I/F216を通して入力される画像データにはJPEGやPNGなど、記録装置201で記録できない画像データも存在する。画像処理部219は、これらのデータにデコードやCMYK変換などを実行し、記録装置201で記録可能な印刷データを生成する。こうして生成された印刷データは、画像処理装置I/F212を介して記録装置201へ送信される。
以下、実施形態に係る情報処理装置100を説明する。
図3は、実施形態に係る情報処理装置100が印刷データを生成してプリンタ114へ送信する処理を説明するフローチャートである。尚、このフローチャートで示す処理は、CPU101がRAM103に展開したプログラムを実行することにより達成される。
まずS301でCPU101は、変更可能なロジックを取得する。このロジックの取得は、情報処理装置100搭載のブラウザ401(図4)を用いて、外部I/F108を介して接続されたプリンタ114からhttpプロトコルで取得する。
図4は、実施形態に係る情報処理装置100がプリンタ114或いはサーバからデータを取得する例を説明する図である。
ブラウザ401及び専用ソフト402は情報処理装置100で実行されている。プリンタ114は、ブラウザ401からの問い合わせに対しHTMLファイル、JavaScriptファイル、WASM(WebAssemblyファイル)を返却する。このHTMLファイルには、アプリのUIに関する記述がなされており、JavaScriptと共にUIを構築するために用いられる。このJavaScriptファイルは、JavaScriptというスクリプト言語で記載されたプログラムである。そして、JavaScriptファイルには、動的にファイルを変更するためのロジックが記載されており、このロジックを用いることで部分的な処理の変更を可能とする。なおここで取得されるJavaScriptファイルは、コンパイルされていないものとする。そして、JavaScriptファイルが実行される場合に、情報処理装置100においてコンパイルされるものとする。すなわちJavaScriptにより作成されたロジックは情報処理装置100においてアプリケーションの実行時にコンパイルされCPU101により実行される。なおブラウザ401を含め通常のブラウザはJavaScriptエンジンを搭載しており、このJavaScriptエンジンによりJavaScriptは実行時に動的にコンパイルがされる。WASMファイルは、プリンタ114内部で実行される印刷データの生成処理のロジックであり、このWASMファイルを実行することで、ブラウザ401上でプリンタ114内部の処理と同等の印刷データの生成処理が実行される。さらに、本発明においては、WASMファイルは、情報処理装置100が取得する前に予めコンパイルされたプログラムである。具体的には、予めコンパイルされたWASMファイルをプリンタ114が有しており、そのWASMファイルを情報処理装置100が取得する。なおプリンタ114が有するWASMファイルは、プリンタ114でコンパイルが実行されたファイルであっても良いし、外部のサーバコンパイルが実行されたファイルであっても良い。また本発明においてWASMファイルは、WebAssemblyで記載された命令セットのことである。なおWASMファイルはJavaScriptファイルから利用可能である。
プリンタ114での通信処理は、画像処理装置の主制御部211で制御される。プリンタ114から情報処理装置100に返却されるファイルは、本実施形態ではHTMLファイル、JavaScriptファイル、WASMファイルであるが、これに限定されるものではない。また通信プロトコルは、ブラウザ401が利用できるものであれば何でもよく、http通信に制限されるものではない。例えば、httpsを用いて通信のセキュリティを高めたり、WebSocketを用いて通信の高速化を図っても良い。
また実施形態では、ブラウザ401からプリンタ114に問い合わせをして、そのプリンタ114に紐づいた印刷データの生成ロジックを記述したファイルを取得しているが、ファイルの取得はこれに限定されない。例えば、サーバ111~113から受け取っても良いし、ファイル要求を出すクライアントソフトは専用ソフト402でも良い。サーバ111~113からデータを受け取る場合、手元にプリンタ本体がなくても印刷データの生成処理の変更が行える利点がある。
専用ソフト402を用いる場合は、クライアントソフトをNativeで記載できるため、ブラウザが利用できない任意の通信プロトコルを利用することが可能となる。加えて、一度通信して取得したファイルを記憶領域403(2次記憶装置105)に保存しておくことで、2回目以降は、サーバと通信しなくても印刷データの生成処理の変更操作が可能となる。更に、ロジックを変更した後の処理をカスタムファイル406として保存し、使い回すことも可能となる。また専用ソフト402を用いる場合は、内部のローカルサーバ404を実行して、記憶領域403からファイルを読み込ませればよい。Webエンジン405は、JavaScriptなどを解釈して処理を実行する。専用ソフト402のようにWebエンジン405を抱え込むと、ブラウザ401のバージョン変更による影響を受けることがなくなる利点もある。
次にS302に進みCPU101は、UIを表示する。このUIの表示は、外部I/F106等を介して接続された外部のディスプレイで行ってもよいし、例えば、スマートフォンであれば、そのスマートフォンに搭載されているタッチパネルディスプレイに表示すればよい。
図5(A)は、S302のUI表示で表示されるメインフロー画面の一例を示す図である。
実施形態に係るUI表示では、このメインフロー画面500が表示される。このメインフロー画面500には、印刷データの生成処理のフローと各項目を示したブロック501~506と、最終的に印刷実行を指示する実行ボタン507が表示される。ユーザは、メインフロー画面500から任意の項目を選択して印刷データの生成処理を変更することができる。
次にS303に進みCPU101は、ユーザからの印刷データの生成処理を変更する指示を受け取ると、ユーザの指示に従って印刷データの生成処理のロジックを変更する。UIブロック501~506はそれぞれ、図6の印刷データの生成処理602~606に対応し、以後、607~608も含めた印刷データの生成処理を「処理ブロック」と記載する。尚、印刷データの生成処理は、これら印刷データの生成処理602~606に限定されるものではない。
図6は、実施形態に係る情報処理装置100において印刷データを生成して送信するまでの処理の流れを説明する図である。印刷データの生成処理ブロック602~606は、図5のブロック501~506と対応している。
以後、印刷データの生成処理ブロック602~608、及び、UIを含めたホストデバイス上で動作するシステム全体を「印刷データの生成フレームワーク」600と記載する。ここで、処理ブロック群610(602~606)はUIでユーザに提示され、ユーザが変更などの指示を与えることが可能な処理ブロックである。処理ブロック群611(607~608)は、ユーザには提示せず印刷データの生成フレームワーク600が処理する処理ブロックである。処理ブロック群611の処理もWASMでプリンタ114から提供されており、各処理は一つのWASMファイルにまとまっていても良いし、複数のWASMファイルで提供されていても良い。すなわち、予めコンパイルされた利用可能なロジックが提供されていれば、提供の形態はどのようなものであっても良い。
まず入力画像601は、印刷データの生成処理の処理対象となる、入力された画像データである。入力画像601は、図5(A)のメインフロー画面500の入力画像選択ブロック501をユーザがクリックすることで取得される。画像データの取得は、HTMLであれば<input>タグを用いることでホストデバイスのファイルから画像データを取得できる。他にもJavaScriptのfetch関数などを用いて、インターネット110経由で外部から画像ファイルを取得することも可能である。こうして入力画像選択ブロック501で選択されて入力された画像データはデコードされ、データ解析602へ入力される前に、RGB各8ビットの24ビットのデータに展開されているものとし、下記のフォーマットで保持されているものとする。
let image = {
width: 画像の横幅
height: 画像の縦幅
channels: 3 // RGBの3チャネル
depth: 8 // 演算精度。16bitなら16
data: 画像データ
colorSpace: “AdobeRGB”
}
データ解析602は、印刷データの生成処理で一番初めに画像データが渡される箇所であり、画像データの解析を行う。
let image = {
width: 画像の横幅
height: 画像の縦幅
channels: 3 // RGBの3チャネル
depth: 8 // 演算精度。16bitなら16
data: 画像データ
colorSpace: “AdobeRGB”
}
データ解析602は、印刷データの生成処理で一番初めに画像データが渡される箇所であり、画像データの解析を行う。
インクジェットプリンタでは、黒い領域を印刷するのにCMY(シアン、マゼンタ、イエロー)インクを混ぜる方法は使わない。なぜならCMYインクを混ぜる方法では理論的には黒になるが技術的に再現するのは困難であることに加え、インク消費量も3色分と多くなり、黒インク(K)を利用した方が合理的だからである。そのため、黒い領域には、黒(K)インクを用いることが一般的である。ここで言う黒い領域は、例えばドキュメントの文字領域がそれにあたる。しかしドキュメントと言っても黒い文字だけのドキュメントもあれば、図が挿入されているドキュメントもある。このようなドキュメントにおいてCMYインクで打つ領域と、Kインクで打つ領域を適切に分離することが画質向上やインク(記録材)の消費量の削減につながる。この領域分離を行う部分がデータ解析602であり、画像中の文字領域と文字領域以外を解析し、その解析結果をデータとして保存する役目を持つ。データの保持はRAM103に記憶すれば良く、専用アプリを用いる場合は2次記憶装置105に保存しても良い。データ解析602を実行すると次にエラーチェック620を行う。ここでエラーが検出されなければ前処理603に進む。
前処理603は、RGBで入力されたデータを変更してRGBデータで出力する。ここで例えば前処理603を変更したい場合、ユーザはメインフロー画面500の前処理ブロック503をクリックする。前処理ブロック503がクリックされると、図5(B)に示す前処理編集画面510が表示される。
図5(B)は、図5(A)の前処理ブロック503がクリックされることにより表示される前処理編集画面510の一例を示す図である。
この前処理編集画面510では、3種類の印刷データの生成処理のいずれかを選択して指定でき、ここではプリセットボタン511、直接編集ボタン512、ファイル選択ボタン513のいずれかをクリックすることで選択できる。
プリセットボタン511は、複数のプリセット処理の中から処理を選択でき、これらのプリセット処理は、前述のS301でプリンタ114にアクセスしたタイミングで取得されている。前処理の例としては、例えば色空間変換が挙げられる。
一般的に画像のデジタルデータは各ピクセルがRGBで構成され、各8ビットで表現されている。この場合、最小値は0、最大値は255となり、例えば(R,G,B)=(0,0,0)であれば黒を示し、(R,G,B)=(0,255,0)であれば緑を示す。255は8ビットの最大値であり、例えば(R,G,B)=(0,255,0)は、緑の最大出力を示す。
一方、画像データを表示するディスプレイには様々な種類があり、色の表現力が異なる。ここで緑色の表現力の高いディスプレイAと、緑色の表現力が低いディスプレイBがある場合、(R,G,B)=(0,255,0)を表示すると、デジタルデータは同じあるが、人の目からは同じ色に見えないという状況が発生する。具体的には、ディスプレイAは、AdobeRGBモニタであり、ディスプレイBはsRGBディスプレイなどの場合がそれに該当する。つまり、RGB各8ビットのデータを同一にしただけでは、ディスプレイをまたいだ時に、人の目から見て同じ色を表現することができない。このような表現の差を低減するのが色空間と色空間変換処理である。色空間とは、表現できる色の範囲(色域)を示し、sRGB、AdobeRGB、DisplayP3などが存在する。この色空間とRGBデータとを組み合わせて画像データとして保存することで、ディスプレイをまたいでも同じ色に近づけることが可能となる。この変換処理を色空間変換という。
複数のプリセットの中から処理を選択する際、例えばsRGBからプリンタ色空間(DeviceRGB)への色空間変換処理、AdobeRGBからプリンタ色空間への色空間変換処理等がプリセット処理として用意されているものとする。プリセット処理には、これ以外にも、例えば輝度を明るくする処理や、エッジ強調処理、スムージング処理などがあっても良く、上述の色空間変換に限定されるものではなく、また、これらを複数選択できる構成でも良い。
直接編集ボタン512は、JavaScriptにより直接、プログラムを記載できる。直接編集ボタン512が押下されると、図5(B)のように編集領域514が表示される。ユーザは、この編集領域514を介して、実行したい処理を実装することができる。JavaSriptでは動的に処理をコンパイルするため、実施形態のように後から処理を上書きする構成が可能となる。
編集領域514には、前処理603へ入力されるデータや、各データの説明、出力すべきデータが表示されており、ユーザはこれらの情報を基にプログラムを記述する。また、前処理603の変更に際して、全てを置き換える場合もあれば、元の前処理に新しい処理を追加する方法を採用したい状況も想定される。このような状況に対応するために、プリンタ114から取得した前処理603に関するWASMファイルを実行する手段も同時に提供する。処理の変更は、前述のように処理を変更、追加するだけではなく、処理を一切スキップすることも変更の内に入ることとする。
直接編集ボタン512による編集では、JavaScriptで記載可能であり、JavaScriptが利用できる機能が活用できる。例えばWebGLなどのAPIを用いればGPUでの処理も可能となり、変更後の印刷データの生成処理の高速化が期待できる。
ファイル選択ボタン513が押下されると、印刷データの生成処理の変更を外部ファイルの読み込みで実現できる。このとき読み込むファイルは、特定のルールに従った記述を条件とし、そのルールに基づくことで処理ロジックの読み込みを可能とする。例えば印刷データの生成フレームワーク600に処理ブロックを上書きするための上書き関数を用意しておき、外部ファイルは、必ず、この上書き関数を呼び出すことを条件とする等が特定のルールにあたる。当然、特定のルールがこれに制限されるわけではない。
このように、処理ロジックを規定する外部ファイルを読み込んで印刷データの生成処理を変更できるようにすることで、一度生成した処理を使い回したり、第三者が用意したファイルを利用するなどの利便性の向上が図れる。また外部ファイルの生成は、直接編集ボタン512による編集で生成したものを、エクスポートボタン515の押下に応じてエクスポートして生成しても良い。ブラウザ401では、WASMが利用できるので、外部ファイルの読み込みはJavaScriptとWASMを読み込み、読み込ませたWASMを利用させても良い。WASMを生成可能なプログラミング言語であるC/C++やRUSTは、並列処理の記載が可能であり、これを用いることで並列処理による高速化が期待できる。
以上が本実施形態に係る前処理603の変換方法である。ここでは、前処理で8ビット精度のRGBデータ入力を、10ビット精度のRGBデータへ拡張するものとする。またユーザは、直接編集ボタン512による編集により、AdobeRGB色空間をプリンタ114の色空間であるDeviceRGBに独自処理で変換し、同時に8ビットから10ビットへの拡張処理も行うものとする。ここで画像データのビット数を増やす理由は、演算精度を高めるためであり、実際のプリンタでは8ビット以上の精度で演算していることが多い。ビット数を増やす方法は、前述のように決め打ちのビット精度にしても良いし、プリンタ固有の情報であるため、プリンタ114へ内部の演算精度を問い合わせて決定しても良い。このように8ビットから10ビットへ演算精度を上げることにより、ユーザは画素値を0~255の範囲ではなく0~1023の範囲で扱うこととなる。上記の画像フォーマットに従えば、前処理603から後段処理604へ渡される画像データは、下記のフォーマットとなる。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 3
depth: 10 // 10ビットの演算精度
data: 画像データ // Uint16Array
colorSpace: “DeviceRGB”
}
ここで前処理603から後段処理604へ画像データを渡すときに印刷データの生成フレームワーク600は、前処理のエラーチェック621を行う。実施形態では、後段処理604へ10ビットの画像データが渡されるが、これ以上のビット数のデータは、印刷データの生成フレームワーク600からすれば想定外である。そのためエラーチェック621では、前処理603から後段処理604へ渡される画像データが10ビット以下に適応しているかどうか確認する。ここで画像フォーマットのdataの型は、16ビットの型(Uint16Array)で定義されているものとする。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 3
depth: 10 // 10ビットの演算精度
data: 画像データ // Uint16Array
colorSpace: “DeviceRGB”
}
ここで前処理603から後段処理604へ画像データを渡すときに印刷データの生成フレームワーク600は、前処理のエラーチェック621を行う。実施形態では、後段処理604へ10ビットの画像データが渡されるが、これ以上のビット数のデータは、印刷データの生成フレームワーク600からすれば想定外である。そのためエラーチェック621では、前処理603から後段処理604へ渡される画像データが10ビット以下に適応しているかどうか確認する。ここで画像フォーマットのdataの型は、16ビットの型(Uint16Array)で定義されているものとする。
図7は、実施形態における画像データと扱うビット数を説明する図である。
図7において、1画素704のR701、G702、B703はそれぞれ16ビット(2バイト)を扱える領域705を保持している。実施形態では、参照番号706で示す6ビットは使用しない。10ビットのデータを取り得る値が0~1023であり、その最大値は1023である。しかし実施形態では、JavaScriptはデータを16ビットの型で処理しているため、実際には1024以上の値を入れることが可能である。これに着目すればエラーチェック621ですべきことは、前処理603から渡される画像データの中に1023を超える値が入っていないかをチェックすることである。その他のエラーチェックとしては、画像フォーマットのchannelsは3、depthは10、colorSpaceはDeviceRGBであることを確認することも考えられる。
このように画像データの値だけではなく、画像フォーマットの中身も確認することで、印刷データの生成フレームワーク600が意図する各処理ブロックでの出力をユーザに意識させることができる。図6のエラーチェック620~624のそれぞれでエラーが発覚した場合の通知は、JavaScriptの機能でエラーをthrowし、ログにエラーを表示しても良いし、UIでエラーダイアログを表示しても良い。
尚、実施形態では、JavaScriptのUint16Arrayを例に挙げたが、当然これに限定されず、負の値や小数点の値を用いても良く、その場合はそれに応じた値域のチェックを行う。
図6の後段処理604からハーフトーニング606も前処理603と同様に、ユーザが変更可能である。前処理603以降、ユーザによるロジックの変更はないものとした上で、各処理ブロックについて説明を続ける。
後段処理604は、RGBデータをCMYKデータに変換する処理ブロックである。PCやスマートフォンなどでは画像データはRGBで扱われる。これらの画面は発光能力があるため、RGBの加法混色で色を表現する。それに対しプリンタによる印刷物は発光しないため減法混色によって色を表現する。減法混色では、色を表現するのにCMYデータが必要となる。プリンタ114では、このCMYインクに黒(K)インクを追加し、CMYKで印刷を行う。つまり最終的に印刷に必要なデータは、CMYKに関するデータであるため、どこかのタイミングでRGBデータをCMYKデータに変換する必要がある。実施形態では、それが後段処理604で行われる。例えば、RGBデータをCMYKデータに変換する式の例として下記の式が挙げられる。
K = 1023 - max(R, G, B);
C = (1023 - R - K) / (1023 - K);
M = (1023 - G - K) / (1023 - K);
Y = (1023 - B - K) / (1023 - K);
ここでmaxは、与えられた引数から最大値を取得する関数である。
K = 1023 - max(R, G, B);
C = (1023 - R - K) / (1023 - K);
M = (1023 - G - K) / (1023 - K);
Y = (1023 - B - K) / (1023 - K);
ここでmaxは、与えられた引数から最大値を取得する関数である。
しかしながら上述の処理を実際に使うことはない。なぜなら印刷される色はCMYKデータだけではなく、プリンタ114に搭載されているインク特性や、プリンタ114自身のメカ精度、ハーフトーニングによるインクの打ち込み場所によって大きく異なるためである。よって後段処理604におけるRGBデータをCMYKデータに変換する処理は、プリンタベンダー各社が独自に作り込む箇所である。
しかしながら、ここでもユーザがカスタマイズする余地はある。例えば後段処理604は、プリンタ114から取得した、変更可能な印刷データの生成ロジックに基づく処理を実行してCMYKデータに変更した後、CMYKデータの量を半分にするということも可能である。CMYKデータを半分にするということは、単純にインクの吐出量が減らされるため、薄くても良いからインクの消費量を減らしたいユーザによっては好適である。また、例えばプリンタ114に問い合わせた結果、Cインクの残量が少ないのであれば、CMYKデータの内、Cのデータ量を減少することで、シアンのインク切れを先延ばしすることもできる。
一体型インクカートリッジと呼ばれるインクと記録ヘッドとが一体型のタイプでは、一つのカートリッジにCMYインクが含まれており、いずれか一つの色がなくなったタイミングでカートリッジを変更しないといけない。CMYデータの値をカスタマイズすることで、インクの使用量を均一化して、カートリッジの交換サイクルを伸ばすことが期待できる。
ここで後段処理604からガンマ補正605に渡される画像フォーマットは、以下の通りとなる。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 4 // CMYK
depth: 10 // 10ビットの演算精度。
data: 画像データ // Uint16Array
colorSpace: “DeviceCMYK”
}
ガンマ補正605では、CMYKデータに対するガンマ補正を実行する。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 4 // CMYK
depth: 10 // 10ビットの演算精度。
data: 画像データ // Uint16Array
colorSpace: “DeviceCMYK”
}
ガンマ補正605では、CMYKデータに対するガンマ補正を実行する。
後段処理604でCMYKデータに変換され、それぞれ0~1023の値が記憶されている。ここで0はインクを全く打たない値であり、1023はインクを最大まで吐出する値となる。ここで0~1023の値に対応して吐出するインク量を制御しても、色の濃さが吐出量に比例して濃くなってゆくわけではない。何もない白い紙にインクを打ち込んでゆけば徐々に濃くなってゆくのが視認できるが、ある程度色が飽和してくると同じ量のインク打ち込んでも濃くなる度合が弱くなってくる。これは人間の視覚特性やインクの特性、プリンタのDPI(Dots Per Inch)など様々な要因は考えられるが、それらを加味して調整するのがガンマ補正605の処理である。例えばCMKYデータを下記のように変更する。
γ = 2.2;
C = 1023 * pow(1.0 - (C/1023), γ);
M = 1023 * pow(1.0 - (M/1023), γ);
Y = 1023 * pow(1.0 - (Y/1023), γ);
K = 1023 * pow(1.0 - (K/1023), γ);
ここで、pow(a,b)はaをb乗する関数である。
C = 1023 * pow(1.0 - (C/1023), γ);
M = 1023 * pow(1.0 - (M/1023), γ);
Y = 1023 * pow(1.0 - (Y/1023), γ);
K = 1023 * pow(1.0 - (K/1023), γ);
ここで、pow(a,b)はaをb乗する関数である。
後段処理604を変更したユーザであれば、ガンマ補正605も編集することで、より人間の視覚特性を加味したCMYKデータを生成することができる。また、一般的にガンマ補正は、画像の暗部や明部の強調に使うことがあり、ガンマ補正605をそのような用途に用いることも可能である。
ガンマ補正604までは、CMYKデータはデジタルデータとして0~1023の値で管理されていた。しかし実際にプリンタ114で印刷するとなると「インクを打つ」「インクを打たない」の2種類しか選択できない。上記2種類の他に「少しだけ打つ」、「多めに打つ」などのバリエーションがあるプリンタも存在するが、デジタルデータで示される1024段階に比べたら断然少ない。そこでプリンタは人間の目に知覚出来ないレベルでの極小領域に対して「インクを打つ領域」「インクを打たない領域」の疎密を形成することで濃淡を表現している。この「インクを打つ領域」「インクを打たない領域」をデジタルデータ的に生成するのがハーフトーニング606で、本実施形態では「打つ」「打たない」の2値のみを扱うものとする。ハーフトーニング処理は広く知られている技術であり、ディザ法や、誤差拡散法などが存在する。
ハーフトーニング処理で問題となるのは、例えば「細線処理」であり、ユーザはハーフトーニング606を変更することで、独自に細線処理を記載することが可能となる。細線とは細い線であり、建築物の設計図を印刷する際によく登場する。ハーフトーニング606は、「打つ」「打たない」領域を2分するため、細い線の途中が「打たない」と判定されると線が欠けてしまう問題がある。これを防止するために、細い線がある場合は途中を分断しないように調整する必要がある。
ここで、印刷データの生成フレームワーク600は、データ解析602において入力画像601を解析しており、その結果がRAM103に保存されている。またデータ解析602では細線の検知も行われていたものとする。細線の検知は、例えばエッジ検出などの技術を用いれば良い。前述のようにエッジが検出されていれば、エッジの部分に関して途中で断絶が起きないように「打つ」という判定に書き換えてしまえば良い。
このようにデータ解析602の解析結果を後の処理ブロックにつなげることも可能であり、当然、解析結果を利用できる処理はハーフトーニング処理に限定されない。
上記のようにユーザは、メインフロー画面500のブロック501~506で任意の処理を変更した後、実行ボタン507を押下する。これにより図3のS304の印刷データの生成処理が開始される。こうして印刷データの生成フレームワーク600は、印刷データを生成する。次に印刷データの生成フレームワーク600が実行する、処理ブロック群611の処理ブロック607,608について説明する。
ハーフトーニング606で生成された結果は、CMYKデータのそれぞれで「打つ」「打たない」の2値情報であり、下記の画像フォーマットになっている。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 4 // CMYK
depth: 1 // 「打つ」「打たない」の1ビット
data: 画像データ // uint8Array()
colorSpace: “none”
}
ここで、dataに関しては圧縮がかけられる。今までは16ビットの領域を確保し10ビットの演算精度で処理していたが、ハーフトーニング606の後は1ビットで表現できる情報になっている。
image = {
width: 画像の横幅
height: 画像の縦幅
channels: 4 // CMYK
depth: 1 // 「打つ」「打たない」の1ビット
data: 画像データ // uint8Array()
colorSpace: “none”
}
ここで、dataに関しては圧縮がかけられる。今までは16ビットの領域を確保し10ビットの演算精度で処理していたが、ハーフトーニング606の後は1ビットで表現できる情報になっている。
図8は、ビットシフトによるシアン(C)データのデータ圧縮を説明する図である。
図中の801は、シアンのx、y座標が(0,0)のハーフトーニング処理後のデータを示している。同様に802は、シアンのx、y座標が(15,0)のハーフトーニング処理後のデータを示している。これらのデータは、参照番号803で示すように1ビットで表現でき、16ビットの領域を使うのはリソースの無駄遣いである。このようにデータを詰めて再生成することでデータの圧縮になる。
また、画像データは近くの画素と似た画素値を持つ場合が多いという特性を持つ。つまり同じ値が連続する場合が多く、上記の圧縮の他にもランレングス圧縮や、ハフマン符号などの圧縮アルゴリズムを併用することで、更なるデータ圧縮が期待できる。参照番号804は、シフト演算によってビットを詰める処理がなされた「シフト圧縮」結果を示している。尚、上記圧縮処理は画像フォーマットをCMYKそれぞれに分離してから実行されるものとし、圧縮後の下記つの画像がエンディアン処理608に送信される。
imageC = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // C
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageM = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // M
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageY = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // Y
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageK = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // K
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
エンディアン処理608において、エンディアンとは8ビット(1バイト)単位でみた時のデータの並び順であり、ビッグエンディアン、リトルエンディアンなどが存在する。どの方式が採用されているかはCPUにより異なり、エンディアンが異なる場合はデータの整合性を保つためにバイトの並びを変更する必要がある。これを行うのがエンディアン処理608である。
imageC = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // C
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageM = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // M
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageY = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // Y
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
imageK = {
width: 画像の横幅
height: 画像の縦幅
channels: 1 // K
depth: 1 //1ビット。
data: 画像データ // uint16Array()
colorSpace: “none”
}
エンディアン処理608において、エンディアンとは8ビット(1バイト)単位でみた時のデータの並び順であり、ビッグエンディアン、リトルエンディアンなどが存在する。どの方式が採用されているかはCPUにより異なり、エンディアンが異なる場合はデータの整合性を保つためにバイトの並びを変更する必要がある。これを行うのがエンディアン処理608である。
エンディアン処理608に必要な情報は、情報処理装置100のエンディアン方式と、印刷データの送信対象であるプリンタ114のエンディアン方式である。従って、情報処理装置100は、プリンタ114に対してエンディアン方式に関する情報の問い合わせを行う。これにより受信したエンディアン方式が情報処理装置100のエンディアン方式と異なる場合は、このエンディアン処理608を実施する。但し、エンディアンの方式が同じである場合は、このエンディアン処理608はスキップして良い。
次に図3に戻り、S304で印刷デーを生成するとS305に進み、印刷データをプリンタ114に送信する。これは図6の印刷データの送信609に対応する。
実施形態では、情報処理装置100は、プリンタ114へプリンタ固有の情報をリクエストしていたが、これらはどのようなリクエストであるかを送信データに含めていたためプリンタ114が正しく応答できた。本実施形態におけるプリンタ114への印刷開始指示はhttp通信のPOSTメソッドを用い、印刷データの実体はデータフォーマット900を用いることで、プリンタ114が印刷処理を開始できるものとする。
図9は、実施形態に係る情報処理装置100からプリンタ114に送信する印刷データのデータフォーマットを説明する図である。
ここで参照番号901は、データフォーマットにおけるアドレスを示しており、参照番号902は、アドレス901に格納されるバイト数を示している。参照番号903は、圧縮の種類を示している。ここで「シフト圧縮」は、図8の参照番号804で示すようなシフト演算によってビットを詰める処理を意味している。
プリンタ114は、http通信のPOSTメソッドで送られてきたデータの実体の先頭の値が「0xa」であることをトリガーにして印刷を開始する。
実際の運用では、情報処理装置100はプリンタ114に印刷可能な状態かを問い合わせて、印刷可能な場合にデータを送信することが好ましい。プリンタ114が何かしらの印刷を実行中で、新たなデータを受け付けられない場合は、UIでその旨を通知する。もしくは、プリンタ114がデータ受付可能な状態になるまで、情報処理装置100はRAM103や2次記憶装置105にデータを保持しておき、受付可能となったタイミングで自動的にデータ送信を開始するなどが考えられる。
また、データフォーマット900は、参照番号906~909で示すように、CMYKデータをそれぞれ一面分ずつ保持しているが、CMYKデータを一行ずつ保持しても良い。
図10は、実施形態に係る情報処理装置100からプリンタ114に送信する印刷データの他のデータフォーマットを説明する図である。
ここでは、情報処理装置100からプリンタ114に、1行ずつデータを送信するときのデータフォーマットを示している。
このように一行ずつデータを送信できるフォーマット910であれば、プリンタ114は全データの受信を待たずとも印刷を開始できるメリットがある。また、プリンタ114でデータを保持しておくためのバッファが低容量で済むため、プリンタのコストダウンも期待できる。
以上が情報処理装置100の動作である。
情報処理装置100がプリンタ114にデータを送信した後、プリンタ114は外部I/F216を介して画像処理装置の主制御部211がデータを受信する。受信したデータが記録装置201へ直接送信して印刷できるデータの場合は、画像処理部219での画像処理を実行せずに画像処理装置I/F212を介して記録装置201へ送信する。例えばデータ復号など何かしらの処理が必要な場合は、画像処理部219で画像処理を実行してから記録装置201へ処理したデータを送信する。
また、印刷データの生成フレームワーク600は処理ロジック変更の他に、メモリ確保とメモリ解放の手段を提供する。プログラムは、通常、予め確保した領域とは別に、C言語でいうmalloc関数などで動的にメモリを確保して利用することが多い。印刷データの生成フレームワーク600においてもプログラム実行中の動的なメモリの確保や解放が存在するが、WASMを利用してメモリを確保する場合、その解放が必要となる。
JavaScriptであれば、ガベージコレクションが実装されているためメモリ解放は不要であるが、WASMの場合は手動で解放する必要がある。しかしながらJavaScriptに慣れ親しんだユーザは、メモリの解放を意識することが少ないため、メモリ解放のし忘れることも容易に想定でき、それが思わぬバグの原因となる。よって、印刷データの生成フレームワーク600は、メモリの確保、及び、メモリの解放を担保する手段を提供する必要がある。
印刷データの生成フレームワーク600は、印刷送信データ送信609の後に、メモリの確保はされたが、解放されていないメモリが存在する場合、ユーザに代わってメモリの解放を行う。メモリの確保とメモリの解放の手段は、例えば、ユーザもWASMを利用してロジックを記載し、それをJavaScriptから実行する状況などにおいて利用される。
以上説明したように実施形態によれば、印刷を実行するプリンタに紐づいた印刷データを生成する印刷データの生成ロジックの少なくとも一部を、ユーザが意図する仕様に変更して印刷データを生成することができる。こうしてスクリプト言語での懸念事項を抑えつつ、プリンタで印刷される印刷データの生成を情報処理装置側で動的に変更でき、かつ、本来の印刷データの生成処理も併用できる状態で印刷データを生成できる。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から逸脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
100…情報処理装置、101…CPU、103…RAM、104…ROM、114…プリンタ、201…記録装置、202…画像処理装置、203…記録装置の主制御部、204…記録バッファ、205…記録ヘッド、211…画像処理装置の主制御部、219…画像処理部
Claims (17)
- 情報処理装置で動作するときに解釈され実行される第一プログラムと、前記第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置であって、
印刷データを生成する変更可能な第一生成ロジックであって、印刷を実行するプリンタに紐づいた前記第一生成ロジックを取得する取得手段と、
前記第一生成ロジックの少なくとも一部が変更された第二生成ロジックを生成する変更手段と、
入力された画像データと、前記第二生成ロジックとを用いて前記プリンタで印刷するための印刷データを生成する生成手段と、
前記生成手段で生成された前記印刷データを前記プリンタへ送信する送信手段とを有し、
前記第一生成ロジックは、前記第二プログラムを利用して実行されることを特徴とする情報処理装置。 - 前記変更手段は、前記第一生成ロジックに含まれる処理ブロックを表示し、表示された処理ブロックからユーザに選択された処理ブロックを変更することを特徴とする請求項1に記載の情報処理装置。
- 前記変更手段は、前記第一生成ロジックの選択された処理ブロックを直接編集する、又はプリセットされている生成ロジックを利用して前記選択された処理ブロックを変更する、もしくは、処理ロジックを規定する外部ファイルを入力して前記選択された処理ブロックを変更することにより前記第二生成ロジックを生成することを特徴とする請求項2に記載の情報処理装置。
- 前記変更手段により変更された前記選択された処理ブロックが適応できるかを確認する手段を、更に有することを特徴とする請求項2又は3に記載の情報処理装置。
- 前記変更手段による変更は、前記画像データの画素値の演算精度、或いは前記プリンタにおける記録材の消費量の変更を含むことを特徴とする請求項1乃至4のいずれか1項に記載の情報処理装置。
- 前記取得手段は、前記プリンタから、或いは、サーバから前記第一生成ロジックを取得することを特徴とする請求項1乃至5のいずれか1項に記載の情報処理装置。
- 前記生成手段は、前記画像データのデータ圧縮を含むことを特徴とする請求項1乃至6のいずれか1項に記載の情報処理装置。
- 前記データ圧縮は、前記第二プログラムを用いて実行されることを特徴とする請求項7に記載の情報処理装置。
- 前記生成手段は、前記プリンタに応じたエンディアン処理を実行して前記印刷データを生成することを特徴とする請求項1乃至8のいずれか1項に記載の情報処理装置。
- 前記生成手段は、前記プリンタから前記エンディアン処理の方式を取得し、当該取得した方式に基づいて前記プリンタに応じたエンディアン処理を実行することを特徴とする請求項9に記載の情報処理装置。
- 前記生成手段は、前記印刷データの生成のために使用するメモリの確保と、当該メモリを解放する手段を有することを特徴とする請求項1乃至10のいずれか1項に記載の情報処理装置。
- 前記第一プログラムは、スクリプト言語で記述されていることを特徴とする請求項1乃至11のいずれか1項に記載の情報処理装置。
- 前記スクリプト言語は、JavaScriptであることを特徴とする請求項12に記載の情報処理装置。
- 前記第二プログラムは、前記第一プログラムとは異なるプログラミング言語から生成されることを特徴とする請求項1乃至13のいずれか1項に記載の情報処理装置。
- 前記第二プログラムは、WebAssemblyであることを特徴とする請求項14に記載の情報処理装置。
- 情報処理装置で動作するときに解釈され実行される第一プログラムと、前記第一プログラムから利用できる予めコンパイルされた第二プログラムとを用いて印刷データを生成する情報処理装置を制御する制御方法であって、
印刷データを生成する変更可能な第一生成ロジックであって、印刷を実行するプリンタに紐づいた前記第一生成ロジックを取得する取得工程と、
前記第一生成ロジックの少なくとも一部が変更された第二生成ロジックを生成する変更工程と、
入力された画像データと、前記第二生成ロジックとを用いて前記プリンタで印刷するための印刷データを生成する生成工程と、
前記生成工程で生成された前記印刷データを前記プリンタへ送信する送信工程とを有し、
前記第一生成ロジックは、前記第二プログラムを利用して実行されることを特徴とする制御方法。 - コンピュータに、請求項16に記載の制御方法の各工程を実行させるプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021189621A JP2023076287A (ja) | 2021-11-22 | 2021-11-22 | 情報処理装置とその制御方法、及びプログラム |
US18/051,694 US11836407B2 (en) | 2021-11-22 | 2022-11-01 | Information processing apparatus and control method thereof, and non- transitory computer-readable storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021189621A JP2023076287A (ja) | 2021-11-22 | 2021-11-22 | 情報処理装置とその制御方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023076287A true JP2023076287A (ja) | 2023-06-01 |
Family
ID=86383776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021189621A Pending JP2023076287A (ja) | 2021-11-22 | 2021-11-22 | 情報処理装置とその制御方法、及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US11836407B2 (ja) |
JP (1) | JP2023076287A (ja) |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3962496B2 (ja) * | 1998-01-29 | 2007-08-22 | キヤノン株式会社 | 画像処理方法、装置および記録媒体 |
WO2000004443A1 (en) * | 1998-07-17 | 2000-01-27 | Intergraph Corporation | Byte reordering apparatus and method |
JP5460145B2 (ja) * | 2009-07-01 | 2014-04-02 | キヤノン株式会社 | データ処理装置、データ処理装置の制御方法、及びプログラム |
JP5641782B2 (ja) * | 2010-05-24 | 2014-12-17 | キヤノン株式会社 | 画像処理装置及び画像処理方法 |
JP5825857B2 (ja) * | 2011-06-03 | 2015-12-02 | キヤノン株式会社 | 画像形成装置、画像形成方法、および、プログラム |
JP6386803B2 (ja) * | 2014-06-13 | 2018-09-05 | キヤノン株式会社 | 装置、方法、及びプログラム |
JP6498019B2 (ja) | 2015-04-10 | 2019-04-10 | キヤノン株式会社 | 画像記録装置及びその制御方法 |
JP7147261B2 (ja) * | 2018-05-16 | 2022-10-05 | ブラザー工業株式会社 | プログラム |
JP6901997B2 (ja) | 2018-05-31 | 2021-07-14 | 富士フイルム株式会社 | プログラムの実行制御方法、プログラム、記録媒体、ウェブページ、送信サーバ、クライアントおよびウェブシステム |
KR20200089146A (ko) * | 2019-01-16 | 2020-07-24 | 삼성전자주식회사 | 의료 영상 처리 장치 및 방법 |
US11494599B2 (en) * | 2020-10-22 | 2022-11-08 | Eastman Kodak Company | Temporal correction of tone scale errors in a digital printer |
TWI788805B (zh) * | 2021-03-19 | 2023-01-01 | 瑞昱半導體股份有限公司 | 影像壓縮方法與電路系統 |
JP2023020591A (ja) * | 2021-07-30 | 2023-02-09 | キヤノン株式会社 | 情報処理装置、その制御方法及びプログラム |
-
2021
- 2021-11-22 JP JP2021189621A patent/JP2023076287A/ja active Pending
-
2022
- 2022-11-01 US US18/051,694 patent/US11836407B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20230161527A1 (en) | 2023-05-25 |
US11836407B2 (en) | 2023-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008028679A (ja) | 色変換テーブル生成方法、色変換テーブル及び色変換テーブル生成装置 | |
JPH11313213A (ja) | 情報処理装置、情報処理方法及び媒体 | |
JP2006252551A (ja) | コンテキスト保存によって出力パスを管理するシステムおよび方法 | |
JP2005354414A (ja) | 画像処理装置及びその方法 | |
JP4973803B1 (ja) | 画像処理装置及びプログラム | |
CN115248665A (zh) | 装置的控制方法、打印装置以及存储介质 | |
JP2003348366A (ja) | 画像処理方法及び画像処理装置 | |
KR100699493B1 (ko) | 미리보기이미지 구현방법 및 장치 | |
JP5490757B2 (ja) | プリンタドライバ及びこれを用いた印刷方法 | |
US20100073695A1 (en) | Methods and systems for increasing performance of server-based rendering | |
JP2012174183A (ja) | プリンタドライバプログラム、印刷制御装置および印刷制御装置の制御方法 | |
JP5665429B2 (ja) | 情報処理装置、エラー表示方法、及びプログラム | |
JP4682628B2 (ja) | 画像処理装置、方法、及びプログラム | |
JP2023076287A (ja) | 情報処理装置とその制御方法、及びプログラム | |
US20190052774A1 (en) | Image processing apparatus, image processing method, and storage medium | |
US20130176327A1 (en) | Method of rendering a colour image with spatial gamut mapping | |
US20080259401A1 (en) | Method and system for consistent color control | |
JP4552662B2 (ja) | 画像処理装置 | |
US8937747B2 (en) | Image processing device and program | |
JP2010147841A (ja) | 画像処理装置、画像処理方法、および画像処理プログラム | |
JP2010274616A (ja) | 画像処理システム、画像処理装置、画像形成装置及びプログラム | |
JP5012871B2 (ja) | 画像処理装置、画像形成装置、及び画像処理プログラム | |
JP2011239428A (ja) | 画像処理装置及びそのデータ変換方法 | |
JPH099077A (ja) | 画像形成装置および画像形成方法 | |
JP2005018524A (ja) | 印刷制御方法 |